【剑指offer】和为S的连续正数序列

和为S的连续正数序列

http://www.nowcoder.com/questionTerminal/c451a3fd84b64cb19485dad758a55ebe

尺取法:指对数组保存一对下标(起点,终点),然后根据实际情况交替推进两个端点知道得出答案的方法。

import java.util.ArrayList;

public class Solution {

    int maxn = 10000;

    public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {

        ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
        int[] array = new int[maxn];
        for (int i = 1; i < maxn; i++) {
            array[i] = array[i - 1] + i;
        }

        int l = 0, r = 2; // 至少包括两个数
        while (l + 1 < r) {
            if (array[r] - array[l] == sum) {
                ArrayList<Integer> list = new ArrayList<Integer>();
                for (int i = l + 1; i <= r; i++) {
                    list.add(i);
                }
                lists.add(list);
                r++; // 或者 l++
            } else if (array[r] - array[l] > sum) {
                l++;
            } else {
                r++;
            }
        }
        return lists;
    }

}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务