原理(一般情况):sum[start,end] = sum[end] - sum[start-1];
    !!!记得考虑start == 0 的情况:sum [start,end] = sum[0,end] = sum[end];

    用前缀和来优化还是挺香的
    就比如:
    image.png(本题思路为滑动窗口+前缀和)
    image.png
    上面为前缀和优化之后的(差别太大了)

    1. class Solution {
    2. public:
    3. int minSubArrayLen(int target, vector<int>& nums) {
    4. int sum = 0;
    5. int left = 0;
    6. int right = 0;
    7. int result = 0;
    8. int minresult = 0;
    9. //一般情况
    10. while(right < nums.size()){
    11. sum += nums[right];
    12. while(sum >= target){//满足条件
    13. //更新最小长度
    14. result = right - left + 1;
    15. if(minresult == 0 || result < minresult){
    16. minresult = result;
    17. }
    18. sum -= nums[left];
    19. left++;
    20. }
    21. right++;
    22. }
    23. return minresult;
    24. }
    25. };
    1. class Solution {
    2. public:
    3. int minSubArrayLen(int target, vector<int>& nums) {
    4. int sum = 0;
    5. int left = 0;
    6. int right = 0;
    7. int result = 0;
    8. int minresult = 0;
    9. //一般情况
    10. while(right < nums.size()){
    11. sum = 0;
    12. for(int i = left; i <= right; i++){
    13. sum += nums[i];
    14. }
    15. while(sum >= target){//满足条件
    16. //更新最小长度
    17. result = right - left + 1;
    18. if(minresult == 0 || result < minresult){
    19. minresult = result;
    20. }
    21. left++;
    22. sum = 0;
    23. for(int i = left; i <= right; i++){
    24. sum += nums[i];
    25. }
    26. }
    27. right++;
    28. }
    29. return minresult;
    30. }
    31. };