【leetcode】209. Minimum Size Subarray Sum

题目:
Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn’t one, return 0 instead.


思路:
设置两个变量left与right,都指向第一个变量,cur_sum记录当前范围[left,right]内的元素之和。如果cur_sum>=s,则left前进一步;否则,right前进一步。直到right走到最后。


代码实现:

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        if (nums.size() < 2){
            return 0;
        }
        int min_len = INT_MAX;
        int left = 0;
        int right = 0;
        int cur_sum = nums[0];
        
        while (right < nums.size()){
            if (cur_sum >= s){
                if (right-left+1 < min_len){
                    min_len = right-left+1;
                }
                if (left < right){
                    cur_sum -= nums[left];
                    ++left;
                }else{
                    ++right;
                    if (right >= nums.size()){
                        break;
                    }
                    cur_sum += nums[right];
                }
            }else{
                ++right;
                if (right >= nums.size()){
                    break;
                }
                cur_sum += nums[right];
            }
        }
        if (min_len == INT_MAX){
            min_len = 0;
        }
        return min_len;
    }
};
原创文章 299 获赞 2 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zxc120389574/article/details/106046059