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;
    }
};

目录
相关文章
|
8月前
leetcode-1447:最简分数
leetcode-1447:最简分数
50 0
|
8月前
|
算法
leetcode:389. 找不同
leetcode:389. 找不同
32 0
|
8月前
|
Java
leetcode-474:一和零
leetcode-474:一和零
43 0
leetcode 827 最大人工岛
leetcode 827 最大人工岛
65 0
leetcode 827 最大人工岛
LeetCode 354. Russian Doll Envelopes
给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。
85 0
LeetCode 354. Russian Doll Envelopes
|
存储 算法
leetcode第43题
个位乘个位,得出一个数,然后个位乘十位,全部乘完以后,就再用十位乘以各个位。然后百位乘以各个位,最后将每次得出的数相加。十位的结果要补 1 个 0 ,百位的结果要补两个 0 。相加的话我们可以直接用之前的大数相加。直接看代码吧。
leetcode第43题
leetcode第44题
时间复杂度:text 长度是 T,pattern 长度是 P,那么就是 O(TP)。 空间复杂度:O(TP)。 同样的,和第10题一样,可以优化空间复杂度。
102 0
leetcode第44题
leetcode第54题
在 leetcode 的 solution 和 discuss 看了下,基本就是这个思路了,只是实现上有些不同,怎么用来标记是否走过,当前方向,怎么遍历,实现有些不同,但本质上是一样的。就是充分理解题意,然后模仿遍历的过程。
110 0
leetcode第54题
|
算法
leetcode第40题
会发现出现了很多重复的结果,就是因为没有跳过重复的 1。在求 opt [ 1 ] 的时候就变成了 [ [ 1 ],[ 1 ] ] 这样子,由于后边求的时候都是直接在原来每一个列表里加数字,所有后边都是加了两次了。
leetcode第40题
leetcode第36题
一个 9 * 9 的数独的棋盘。判断已经写入数字的棋盘是不是合法。需要满足下边三点, • 每一行的数字不能重复 • 每一列的数字不能重复 • 9 个 3 * 3 的小棋盘中的数字也不能重复。 只能是 1 - 9 中的数字,不需要考虑数独最后能不能填满
leetcode第36题