https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/

我的解,暴力枚举

  1. class Solution {
  2. public:
  3. vector<vector<int>> findContinuousSequence(int target) {
  4. vector<vector<int>> result;
  5. vector<int> vec;
  6. int start = 1;
  7. for (int i = 1; i <= (target/2)+1;++i) {
  8. int sum = 0;
  9. for (int j = i; j <= (target/2)+1; ++j) {
  10. sum += j;
  11. if (sum == target) {
  12. vec.push_back(j);
  13. result.push_back(vec);
  14. vec.clear();
  15. break;
  16. }
  17. else if (sum < target) {
  18. if (sum+i > target) {
  19. vec.clear();
  20. break;
  21. }
  22. else {
  23. vec.push_back(j);
  24. }
  25. }
  26. else {
  27. vec.clear();
  28. break;
  29. }
  30. }
  31. }
  32. return result;
  33. }
  34. };

官方双指针解

  • sum 值通过求和公式得

  • 如果 sum 等于目标值则情况临时数组并将区间 [l,r] 内所有值写入其中,然后结果数组push这个临时数组,左指针++

  • 如果 sum 大于目标,则左指针右移
  • sum 小于目标,右指针右移
    class Solution {
    public:
      vector<vector<int>> findContinuousSequence(int target) {
          vector<vector<int>>vec;
          vector<int> res;
          for (int l = 1, r = 2; l < r;){
              int sum = (l + r) * (r - l + 1) / 2;
              if (sum == target) {
                  res.clear();
                  for (int i = l; i <= r; ++i) {
                      res.emplace_back(i);
                  }
                  vec.emplace_back(res);
                  l++;
              } else if (sum < target) {
                  r++;
              } else {
                  l++;
              }
          }
          return vec;
      }
    };