1.滑动窗口,必为连续值
class Solution {
public:
int minimumDifference(vector<int>& nums, int k) {
int n=nums.size();
sort(nums.begin(),nums.end());
int ans=INT_MAX;
for(int i=0;i+k-1<n;i++){
ans=min(ans,nums[i+k-1]-nums[i]);
}
return ans;
}
};
2.滑动窗口
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
int n = nums.size(), ret = 0;
int prod = 1, i = 0;
for (int j = 0; j < n; j++) {
prod *= nums[j];
while (i <= j && prod >= k) {
prod /= nums[i];
i++;
}
ret += j - i + 1;
}
return ret;
}
};
3.滑动窗口
class Solution {
public:
int maxConsecutiveChar(string& answerKey, int k, char ch) {
int n = answerKey.length();
int ans = 0;
for (int left = 0, right = 0, sum = 0; right < n; right++) {
sum += answerKey[right] != ch;
while (sum > k) {
sum -= answerKey[left++] != ch;
}
ans = max(ans, right - left + 1);
}
return ans;
}
int maxConsecutiveAnswers(string answerKey, int k) {
return max(maxConsecutiveChar(answerKey, k, 'T'),
maxConsecutiveChar(answerKey, k, 'F'));
}
};