首页 > 其他分享 >力扣209. 长度最小的子数组

力扣209. 长度最小的子数组

时间:2025-01-03 20:04:46浏览次数:3  
标签:end target nums 209 len 力扣 int 数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

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


示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

提示:

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 104

进阶:

  • 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

代码:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        
        int start = 0, end = 0, sum = 0;
        int len = INT_MAX;

        if(nums.size() == 0){
            return 0;
        }

        while(end < nums.size()){
            sum += nums[end];

            while(sum >= target){
                len = min(end - start + 1, len);
                sum -= nums[start];
                start++;
            }

            end++;
        }

        if(len == INT_MAX) return 0;

        return len;
    }
};

解题思路:

(1)使用滑动窗口思想。

(2)首先,右边一直滑到满足条件。

(3)其次,左边一直滑到不满足条件。

(4)注意滑动时,判断最小窗口长度。

标签:end,target,nums,209,len,力扣,int,数组
From: https://blog.csdn.net/m0_57879843/article/details/144916543

相关文章

  • js数组实例方法:forEach,includes,indexOf
    Array.prototype.forEach()forEach()方法对数组的每个元素执行一次给定的函数语法forEach(callbackFn)forEach(callbackFn,thisArg)参数callbackFnelement:数组中正在处理的当前元素index:数组中正在处理的当前元素的索引array:调用了forEach()的数组本身thisA......
  • C++中的数组与指针
    在大多数C++书籍或教程中,数组和指针的知识总是放在一起让大家学习,这是为什么,它们之间有什么联系呢?在C++中,数组与指针有着紧密的联系,主要体现在下面几个方面:1、数组名即指针:本质联系:在大多数情况下,数组名会被隐式转换为指向数组第一个元素的指针。例如,对于一个数组intarr[5];......
  • 【C#】int与byte[]数组互转
    1.int转byte[]1.1C#代码//C#代码intintNum=728;byte[]byteNum=BitConverter.GetBytes(intNum);//byteNum[0]=216//byteNum[1]=2//byteNum[2]=0//byteNum[3]=01.2等效C语言代码//C语言代码intintNum=728;uint8_tbyteNum[4]={0};memcpy(byte......
  • 数组中的第k个最大元素(快速排序)
    给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例1:输入:[3,2,1,5,6,4],k=2输出:5示例 2:输入:[3......
  • 多维数组、锯齿数组
    C++多维数组定义:多维数组可以看作是数组的数组,通过在定义时指定每个维度的大小来创建。下面以三维数组为例。访问:使用多个索引来访问数组中的元素,索引从0开始。销毁:对于栈上定义的多维数组,当作用域结束时会自动销毁;对于堆上动态分配的多维数组,需要手动释放内存。#include<......
  • [数据结构学习笔记3] 数组
    数组是用于存放一组数据,把这组数据存放在连续的空间里。通常有插入,删除,查找,访问等操作。举例:购物清单,初始状态:清单:牛奶->鸡蛋->奶油->火腿->果汁下标:0      1     2      3     4插入:1.插在末尾清单:牛奶->鸡蛋->奶......
  • 后缀数组学习笔记
    \(\text{后缀数组学习笔记}\)一、定义对于下标从\(1\)开始,长度为\(n\)的字符串\(s\),我们定义后缀\(i\)表示字符串\(s[i,n]\)。对于后缀数组,我们定义\(sa(i)\)表示所有后缀按字典序排序后第\(i\)小的后缀的编号。例如对于字符串aabaaab,它有\(7\)个后缀,下边我们......
  • 寻找两个正序数组的中位数(二分查找)
    给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。 示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nums1=[1......
  • 寻找旋转排序数组中的最小值(二分查找)
    已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums=[0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0],a[1],a[2],...,a[n-1......
  • js 两个数组合并后去重
    functionmergeUnique(arr1,arr2){return[...newSet([...arr1,...arr2])];}//示例使用constarray1=[1,2,3];constarray2=[2,3,4];constmergedArray=mergeUnique(array1,array2);console.log(mergedArray);//输出:[1,2,3,4]在这个例子中......