问题描述
输入一个长度为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));
}
}