一般题目都是连续的子数组,然后要求乘积啊,和啊,之类的
比如要求子数组乘积的,如713. Subarray Product Less Than K
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
int res = 0;
int left = 0;
int product = 1;
if(k<=1){
return 0;
}
for (int i = 0; i < nums.size(); i++) {
product *= nums[i];
while (product >= k) {
product /= nums[left++];
}
res += i - left + 1;
}
return res;
}
};
要求子数组和的,如209. Minimum Size Subarray Sum
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int left = 0;
int ans = INT_MAX;
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
while (sum>=s)
{
ans = min(ans, i - left+1);
sum -= nums[left++];
}
}
return ans==INT_MAX?0:ans;
}
};