首页 > 其他分享 >长度最小的子数组

长度最小的子数组

时间:2024-02-04 23:00:37浏览次数:29  
标签:nums int sum 最小 ret 数组 长度

问题描述:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。

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

进阶: 如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。

//思路:
//l=0,r=-1(一开始不包含任何元素,所以取l=0,r=-1),
//滑动窗口[l,r] ,sum是[l...r]的和:
//当sum<s时,此时 r+1,拓展该窗口,sum+=nums[r+1];其他情况,缩小该窗口,sum-=nums[l],l++

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int n=nums.length;
        int l=0,r=-1;
        //[l,r]为滑动窗口,开始时不包含任何元素
        int sum=0;
        //记录滑动窗口中元素和
        int ret=n+1;
        //ret记录求解的长度
        while(l<n){
            if(r+1<n && sum<s){
                r++;
                sum+=nums[r];
            }else{
                sum-=nums[l];
                l++;
            }
            if(sum>=s){
                ret=Math.min(ret,(r-l+1));
            }
        }
        //TODO:不能忽视无解的情况
        if(ret==n+1){
            //表示没有找到结果,使得 sum>=s
            ret=0;
        }
        return ret;
    }
}

参考:

标签:nums,int,sum,最小,ret,数组,长度
From: https://www.cnblogs.com/i9code/p/18007174

相关文章

  • 长文件名是指在NTFS文件系统中可以使用超过传统8.3命名规则(8个字符的文件名加上3个字
    长文件名是指在NTFS文件系统中可以使用超过传统8.3命名规则(8个字符的文件名加上3个字符的扩展名)的文件名。传统的8.3命名规则对于文件名和扩展名都有长度限制,而长文件名则允许使用更长的文件名,提供更好的文件管理和用户体验。为什么支持长文件名:在早期的FAT文件系统中,文件名长度......
  • js 数组和对象的深拷贝的方法
    数组深拷贝的方法方法一:for循环实现vararr=[1,2,3,4,5]vararr2=copyArr(arr)functioncopyArr(arr){letres=[]for(leti=0;i<arr.length;i++){res.push(arr[i])}returnres} 方法二:slice方法原理也比较好理解,他是将原数......
  • 树状数组
    树状数组总结前言树状数组是数据结构中的一股清流,代码简洁,思路清晰,又好理解qwq。前置芝士lowbit:https://www.cnblogs.com/zhouruoheng/p/18003331简介树状数组是一种基于lowbit的用于维护\(n\)个数前缀和信息的数据结构。支持:快速求前缀和,复杂度为\(O(\log{n})\)。......
  • 寻找两个有序数组的中位数(4)
    4MedianofTwoSortedArrays问题描述:给定两个大小为m和n的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m+n))。你可以假设nums1和nums2不会同时为空。示例1:nums1=[1,3]nums2=[2]则中位数是2.0示例2:n......
  • 两数之和-输出有序数组
    167TwoSumII-Inputarrayissorted问题描述:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值index1和index2,其中index1必须小于index2。说明:返回的下标值(index1和index2)不是从零开始的。你可以假设每个输入......
  • 合并两个有序数组
    88.合并两个有序数组问题描述:给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素。示例:输......
  • hdu 4460 Friend Chains (图最长路的最小值)
    Problem-4460(hdu.edu.cn)写完提交答案错了,后面发现vis初始化的地方错了,以前BFS都只调用一次,看来我中毒太深。这个题更能体现BFS的特性,增加dis数组记录距离。#include<iostream>#include<queue>#include<cstring>#include<vector>#include<map>usingnamespacestd;c......
  • c语言小练习——字符串长度、拷贝、拼接、比较
    /* 使用c语言知识实现下面程序: 1,实现strlen函数的功能 2,实现strcpy函数的功能 3,实现strcat函数的功能 4,实现strcmp函数的功能 不允许使用已有的str函数*/1#define_CRT_SECURE_NO_WARNINGS2#include<stdio.h>3#include<string.h>4#include<stdbool.h>5#......
  • 金蝶云星空BOS界面修改文本长度后,无法同时修改数据库
     业务背景文本长度默认255不够用,过长截断。 操作BOS签出元数据,修改长度为1000,保存   查询数据库发现长度没有跟随BOS配置 只能手工执行了数据库执行脚本,即可解决问题--sqlserver修改字段长度ALTERTABLET_STK_MISCELLANEOUSALTERCOLUMNFNOTEnvarch......
  • 获取数组中元素的所有组合方式
    代码/***获取words成员的所有组合方式*@param{(string|number)[]}words*@return{(string|number)[][]}*/functioncombine(words){constlist=[]words.forEach((word,idx)=>{constrestWords=[...words.slice(0,idx),...words.slice(......