1. 长度最小的子数组
209
题目:
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
思路:滑动窗口(不是新建数组,就两个指针),末尾指针正常遍历+1更新,起始指针不满足判断条件就更新。
笔记: C++中 INT_MAX= 232? 1 = =2147483647 INT_MIN = ? 232 = -2147483648 表示最大最小整数
Python中 float(“inf”),float(“-inf”)分别表示正负无穷
C++:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX;
int i = 0;
int sum = 0;
int subLength = 0;
for(int j = 0; j < nums.size(); j++){
sum += nums[j];
while(sum >= target){
subLength = j - i + 1;
result = result < subLength ? result : subLength;
sum -= nums[i++];
}
}
return result == INT32_MAX ? 0 : result;
}
};
Python:
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
result = float("inf")
Sum = 0
i = 0
for j in range(len(nums)):
Sum += nums[j]
while Sum >= target:
result = min(result, j - i + 1)
Sum -= nums[i]
i += 1
return 0 if result==float("inf") else result
|