双指针求和为S的连续正数序列

和为S的连续正数序列

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

import java.util.ArrayList;
public class Solution {
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
       ArrayList<ArrayList<Integer>> res = new ArrayList<>();
       if(sum < 3)
           return res;
        //定义两个指针 左指针为1,右指正为2
        int l = 1, r = 2;
        //求和
        int sumV = l + r;

        //在不超出sum的范围
        while(r < sum){
            //右指针前行,再加入结果
            if(sumV < sum){
                r++;
                sumV += r;
            }else if(sumV > sum){    //一旦超出,减去左指针,左指针前移
                sumV -= l;
                l++;
            }else{    //相等,添加进结果集
                ArrayList<Integer> list = new ArrayList<>();
                for(int i = l; i <= r; i++){
                    list.add(i);
                }
                res.add(list);
                r++;    //右指针右移 
                sumV += r;    //下一轮循环比较
            }
        }
        return res;
    }
}
全部评论

相关推荐

能干的三文鱼刷了100道题:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-24 20:25
腾讯今年实习招了这么多人,后面秋招还会招人吗??想着秋招再战来着
牛客965593684号:腾讯好像2020年之后就是实习生招得多,应届生基本上不招,纯实习转正
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务