• 和为S的连续正数序列


    和为S的连续正数序列

    题目描述

    输入一个正数, 打印出和为s的连续正数序列(至少含有两个数). 例如, 输入15, 由于1+2+3+4+5=4+5+6=7+8=15, 所以打印出3个连续序列1~5, 4~6, 7~8

    使用两个游标left和right, left始终小于(sum+1)/2, 若当前和小于sum, 则右侧游标下移一位; 若当前和大于sum则左侧游标下移一位, 与此同时right游标更新为left游标的下一位

    class Solution {
    public:
        vector<vector<int> > FindContinuousSequence(int sum) {
            vector<vector<int>> ret;
            if (2 > sum) {
                return ret;
            }
            int left = 1;
            int right = left + 1;
            
            while (left < ((sum + 1) / 2)) {
                int num = right - left + 1;
                // 当前的和
                int currentSum = (left + right) * num / 2;
                // 和相等
                if (sum == currentSum) {
                    vector<int> temp;    // temp在这里声明下面temp.resize()可注释掉
                    for (int i = left; i <= right; i++) {
                        temp.push_back(i);
                    }
                    ret.push_back(temp);
                    //temp.resize(0);
                    left += 1;
                    right = left + 1;
                    //continue;
                }
                // 和大于sum
                else if (sum < currentSum) {
                    left += 1;
                    right = left + 1;
                    //continue;
                }
                else {
                // 和小于sum, 右边界+1
                    right++;
                }
            }
            return ret;
        }
    };
    

    插一句没用的, 牛客上卖萌的题目描述终于没了

  • 相关阅读:
    nginx负载均衡实现
    shiro 退出 清除缓存
    从零到实现Shiro中Authorization和Authentication的缓存
    Mysql 语句
    N! java
    大数java(pow)
    HDU_1548
    Mike and strings 798B
    Array Division 808D
    poj_1979(dfs)
  • 原文地址:https://www.cnblogs.com/hesper/p/10531323.html
Copyright © 2020-2023  润新知