三重循环寻找最长连续字符串相加和为K值倍数的长度

  • 问题描述
    输入一个长度为n的序列,输入一个K值,在序列中找出最长连续序列A,其相加和为K的倍数。例如字符串{1,2,3,4,5},其K值为5,则连续序列{1,2,3,4,5}和为15,整除K值,因此输出最长连续字符串长度为5。java

  • 代码web

import java.util.ArrayList;
import java.util.Scanner;
public class Main {

    public static void maxLength(int n, ArrayList<Integer> arrayList, int k) {
        int sum = 0;
        int re = 0;
        boolean flag = false;
        for(int i=n;i > 0;i--){
            for(int j=0;j <= n-i;j++){
                for(int x=j;x < j+i;x++){
                    sum += arrayList.get(x);
                }
                if(sum % k == 0){
                    flag = true;
                    break;
                }
                sum = 0;
            }
            if(flag){
                re = i;
                break;
            }
        }
        if (flag) {
            System.out.print(re);
        } else {
            System.out.print(0);
        }
    }

    public static void main(String[] args) {
        long st = System.currentTimeMillis();
        long sp = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        ArrayList<Integer> arrayList = new ArrayList<Integer>();

        for (int i=0;i < n;i++) {
            arrayList.add(s.nextInt());
        }
        int k = s.nextInt();
        System.out.println("K:" + k);
        maxLength(n, arrayList, k);

        long et = System.currentTimeMillis();
        long ep = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
        System.out.println("Time: "+ (et - st) + " Space: " + (ep - sp));
    }
}