问题描述 输入一个长度为n的序列,输入一个K值,在序列中找出最长连续序列A,其相加和为K的倍数。例如字符串{1,2,3,4,5},其K值为5,则连续序列{1,2,3,4,5}和为15,整除K值,所以输出最长连续字符串长度为5。
代码
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)); } }