leetCode---Minimum Size Subarray Sum

来源:互联网 发布:python的素数怎么表示 编辑:程序博客网 时间:2024/06/15 11:24

一. 题目: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.

For example, given the array [2,3,1,2,4,3] and s = 7,
the subarray [4,3] has the minimal length under the problem constraint.


二. 思路分析

          题目大意:给定一个正整数数组,和一个值s,希望求得数组中和大于等于s连续的最小子数组的长度,若不存在则返回0。思路分析:我们需要定义两个指针left和right,分别记录子数组的左右的边界位置,然后我们让right向右移,直到子数组和大于等于给定值或者right达到数组末尾,此时我们更新最短距离,并且将left像右移一位,然后再sum中减去移去的值,然后重复上面的步骤,直到right到达末尾,且left到达临界位置,即要么到达边界,要么再往右移动,和就会小于给定值。代码如下:

class Solution {public:    int minSubArrayLen(int s, vector<int>& nums) {        if (nums.empty()) return 0;        int left = 0, right = 0, sum = 0, len = nums.size(), res = len + 1;        while (right < len) {            while (sum < s && right < len) {                sum += nums[right++];            }            while (sum >= s) {                res = min(res, right - left);                sum -= nums[left++];            }        }        return res == len + 1 ? 0 : res;    }};


原创粉丝点击