leetcode209题解

简介: leetcode209题解

LC209

给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的
子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

class Solution {
   
public:
    int minSubArrayLen(int target, vector<int>& nums) {
   
        //定义两个下标当做一对同向双指针
        int left = 0, right = 0;
        int size = nums.size();
        int sum = 0;
        int len = 0, min_len = INT_MAX;
        //left在开头位置不动,先是right向后走
        for(right = 0; right < size; right++)
        {
   
            //将遍历到的值放进sum中
            sum += nums[right];
            //当sum>=target时就不必再让right向后遍历
            while(sum >= target)
            {
   
                //计算当时的长度
                len = right - left + 1;
                //更新最小长度
                min_len = min(len, min_len);
                //sum达到target的值的时候就让sum减去left当前位置的值,然后让left向前一步
                sum -= nums[left++];
            }
        }

        return min_len == INT_MAX ? 0 : min_len;
    }
};

目录
相关文章
|
5月前
|
C++ Python
leetcode-283:移动零
leetcode-283:移动零
28 0
|
5月前
leetcode-475:供暖器
leetcode-475:供暖器
39 0
LeetCode 389. 找不同
给定两个字符串 s 和 t,它们只包含小写字母。
67 0
|
算法 Python
LeetCode 386. Lexicographical Numbers
给定一个整数 n, 返回从 1 到 n 的字典顺序。
77 0
LeetCode 386. Lexicographical Numbers
LeetCode 354. Russian Doll Envelopes
给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。
78 0
LeetCode 354. Russian Doll Envelopes
|
算法
LeetCode——944. 删列造序
LeetCode——944. 删列造序
102 0
|
存储
leetcode第56题
常规的思想,将大问题化解成小问题去解决。 假设给了一个大小为 n 的列表,然后我们假设 n - 1 个元素的列表已经完成了全部合并,我们现在要解决的就是剩下的 1 个,怎么加到已经合并完的 n -1 个元素中。 这样的话分下边几种情况, 我们把每个范围叫做一个节点,节点包括左端点和右端点。 1. 如下图,新加入的节点左端点和右端点,分别在两个节点之间。这样,我们只要删除
leetcode第56题
|
存储
leetcode第52题
可以发现对于同一条副对角线,row + col 的值是相等的。 对于同一条主对角线,row - col 的值是相等的。 我们同样可以用一个 bool 型数组,来保存当前对角线是否有元素,把它们相加相减的值作为下标。 对于 row - col ,由于出现了负数,所以可以加 1 个 n,由 [ - 3, 3 ] 转换为 [ 1 , 7 ] 。
leetcode第52题
leetcode第34题
从左向右遍历,一旦出现等于 target 的值就结束,保存当前下标。如果从左到右没有找到 target,那么就直接返回 [ -1 , -1 ] 就可以了,因为从左到右没找到,那么从右到左也一定不会找到的。如果找到了,然后再从右到左遍历,一旦出现等于 target 的值就结束,保存当前下标。 时间复杂度是 O(n)并不满足题意,但可以了解下这个思路,从左到右,从右到左之前也遇到过。
leetcode第34题
|
算法
leetcode第42题
也就是红色区域中的水, 数组是 height = [ 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ] 。 原则是高度小于 2,temp ++,高度大于等于 2,ans = ans + temp,temp = 0。 temp 初始化为 0 ,ans 此时等于 2。 height [ 0 ] 等于 0 < 2,不更新。 height [ 1 ] 等于 1 < 2,不更新。 height [ 2 ] 等于 0 < 2, 不更新。 height [ 3 ] 等于 2 >= 2, 开始更新 height [ 4 ] 等于 1 < 2,temp = temp + 1 = 1。 h
leetcode第42题