数据结构-剑指offer-和为S的连续正数序列

38 篇文章 0 订阅
38 篇文章 0 订阅

题目:输出所有和为S的连续正数序列。序列内按照从小到大的顺序,序列间按照开始数字从小到大的顺序.

思路:利用求和公式:(首项+尾项)*项数/2,对连续正数序列求和。跟和为s的两个数字的题目思路相同,定义两个指针:int begin;int end = 2作为初始条件,while(begin<end && end<sum)(如果end的值已经是sum,则就没有再向后计算的必要了,因为无论如何都会大于sum),int curSum = (begin+end)*(end-begin)/2,if(curSum < sum),向后移动end(end++);if(curSum > sum),向后移动begin(begin++);if(curSum == sum),定义容器temp,将从begin到end的所有数字存到容器中,begin++。

class Solution {
public:
    vector<vector<int> > FindContinuousSequence(int sum) {
        vector<vector<int>> result;
        int begin = 1;
        int end = 2;
        while(begin < end && end < sum){
            int current = (begin + end)*(end - begin + 1)/2;
            if(current == sum){
                vector<int> temp;
                for(int i=begin; i<=end; i++)
                    temp.push_back(i);
                result.push_back(temp);
                begin++;
            }
            if(current < sum)
                end++;
            if(current > sum)
                begin++;
        }
        return result;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值