暴力超时
暴力也是要脑子的,题目是最短子数组,要及时的break。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result=INT32_MAX;
int sum=0;
int linesize=0;
for(int i=0;i<nums.size();i++){
sum = 0;
for(int j=i;j<nums.size();j++){
sum+=nums[j];
if(sum>=target){
linesize=j-i+1;
result = result>linesize?linesize:result;
break; //找到最小的了直接break;
}
}
}
return result==INT32_MAX?0:result;
}
};
滑动窗口法
思考
起始位置:当窗口值大于等于target,起始位置向前移动,若满足条件,则获得更优解,不满足条件,跳出循环,结束位置后移寻找其他解。
核心代码为
while(sum>=target){
linesize=j-i+1;
result = result>linesize?linesize:result;
sum-=nums[i++];
}
全代码为
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int i=0;
int sum=0;
int result = INT32_MAX;
int linesize=0;
for(int j=0;j<nums.size();j++){
sum += nums[j];
while(sum>=target){
linesize=j-i+1;
result = result>linesize?linesize:result;
sum-=nums[i++];
}
}
return result==INT32_MAX?0:result;
}
};