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

来源:互联网 发布:mac os 顶部菜单栏 编辑:程序博客网 时间:2024/05/29 08:36

给一个定长的元素集,求子串中元素和是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);    }}

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

原创粉丝点击