题解 | #和为S的连续正数序列#

和为S的连续正数序列

https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe?tpId=265&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3FjudgeStatus%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D13%26type%3D265&difficulty=&judgeStatus=3&tags=&title=&gioEnter=menu

class Solution {
public:
    vector<vector<int> > FindContinuousSequence(int sum) {
      std::vector<int> tmp;
      std::vector<std::vector<int>> res;
      
      int left = 1, right = 2;
      
      while (left < right) {
        int num = (left + right) * (right - left + 1) / 2;
        
        if (num == sum) {
          tmp.clear();
          for (int i = left; i <= right; ++i) {
            tmp.push_back(i);
          }
          res.push_back(tmp);
          //  以该数字为起点的序列之和已经唯一确定了,进入下一位
          ++left;
        } else if (num > sum) {
          ++left;
        } else {
          ++right;
        }
      }
      
      return res;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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