滑动窗口算法求解

2018/10/05 Algorithms 共 665 字,约 2 分钟

一般题目都是连续的子数组,然后要求乘积啊,和啊,之类的

比如要求子数组乘积的,如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;
	}
};

Search

    Table of Contents