序列元素和是k的倍数的最大子串长度

xiaoxiao2021-02-28  142

给一个定长的元素集,求子串中元素和是K的倍数的最大子串长度。 输入第一行数序列长度,输入第二行是序列各元素值,第三行是整数K 输出序列元素子串和是K倍数的最大长度 分析: 1.元素子串是否都能考虑到,两层循环就可以穷举 2.字串和计算,并不停比对是否是K倍数,若是记录子串长度 3.输出最长子串长度

public class RatioSubstring { public static void main(String[] args) { Scanner in = new Scanner(System.in); int m; m = in.nextInt(); int[] input = new int[m]; int i; for (i = 0; i < m; i++) { input[i] = in.nextInt(); } int k; k = in.nextInt(); int sum = 0; int j = 0; int l = 0; int maxL = 0;//更新子串最大长度 for (i = 0; i < m; i++) { for (j = i; j < m; j++) { sum = sum + input[j]; sum = sum % k;//取余,也是为了让累加和更小 if (sum == 0) l = j - i + 1;//余数为零,记录子串长度 } if (l > maxL) //一轮循环更新最大子串长度 maxL = l; sum = 0;//下一轮更换子串起点,累加值清零 } System.out.println(maxL); } }

最开始用的是数组存储每个起点开始的最大子串长度,最后精简用一个变量存储。据说并没有全通过测试用例,不管怎样,贴出来分享,欢迎交流。

转载请注明原文地址: https://www.6miu.com/read-58658.html

最新回复(0)