原理(一般情况):sum[start,end] = sum[end] - sum[start-1];
!!!记得考虑start == 0 的情况:sum [start,end] = sum[0,end] = sum[end];
用前缀和来优化还是挺香的
就比如:
(本题思路为滑动窗口+前缀和)
上面为前缀和优化之后的(差别太大了)
class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int sum = 0;int left = 0;int right = 0;int result = 0;int minresult = 0;//一般情况while(right < nums.size()){sum += nums[right];while(sum >= target){//满足条件//更新最小长度result = right - left + 1;if(minresult == 0 || result < minresult){minresult = result;}sum -= nums[left];left++;}right++;}return minresult;}};
class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int sum = 0;int left = 0;int right = 0;int result = 0;int minresult = 0;//一般情况while(right < nums.size()){sum = 0;for(int i = left; i <= right; i++){sum += nums[i];}while(sum >= target){//满足条件//更新最小长度result = right - left + 1;if(minresult == 0 || result < minresult){minresult = result;}left++;sum = 0;for(int i = left; i <= right; i++){sum += nums[i];}}right++;}return minresult;}};
