记录一下第二次见到的前缀和算法题:
题目:

思路:
子数组是连续的,所以我们可以通过左右指针来移动,它们之间的区域即为所求区域
- 先求出原数组的和,和target比较。如果原数组的和小于target,那么直接返回0就可以了。
- 如果原数组的和大于等于target,就用左右指针+前缀和来解决
1.开始让右指针移动,sum等于右指针经过的数字之和
2.当sum大于等于target的时候,更新结果(len)
3.sum减去左指针所在位置的数字,再次重复2 - 返回最终结果
代码实现:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left=0,right=0,sum=0,len=nums.length+1;
for(;right<nums.length;right++){
sum+=nums[right];
while(sum>=target){
len=Math.min(len,right-left+1);
sum-=nums[left];
left++;
}
}
return len==nums.length+1? 0 : len;
}
}
总结:
好久没写算法题了,感觉到手有些生,立个flag,后面定期写算法题。