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

11--209. 长度最小的子数组

时间:2023-11-18 19:23:45浏览次数:43  
标签:11 target nums -- sum min int 209 数组

给定一个含有 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

 【暴力解法超时】

【双重for循环代码如下:】

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int min = Integer.MAX_VALUE;    //这行代码将 min 初始化为整型的最大值,以确保
                                        //任何比这个值小的子数组长度都可以成为 min 的初始值
        for (int i = 0; i < nums.length; i++) {
            int sum = nums[i];
            if (sum >= target) {
                return 1;
            } 

            for (int j = i + 1; j < nums.length; j++) {
                sum += nums[j];

                if (sum >= target) {
                    min = Math.min(min, j - i + 1);//这行代码用于更新 min 的值。在每次找到一个满足条件的子数组时,
                         //它会计算当前子数组的长度 j - i + 1,并与当前的 min 值进行比较,取较小的值作为新的 min 值
                    break;
                }
            }
        }
        return min == Integer.MAX_VALUE ? 0 : min;
    }
}

 

【滑动窗口(实际上是队列相加)】

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        //l = low, h = high, sum用来记录滑动窗口的总值
        //h用来滑动(或者说h用来入队,l用来出队)
        int l = 0, h = 0, sum = 0;
        int min = Integer.MAX_VALUE;
        while (h < nums.length) {
             sum += nums[h];
             h++;
             while (sum >= target) {
                 min = Math.min(min, h - l); //因为是先加的,h又移动的,所以直接h-l,不用再+1
                 sum -= nums[l];    //出队
                 l++;
             }
        }
        return min == Integer.MAX_VALUE ? 0 : min;  
    }
}

 

标签:11,target,nums,--,sum,min,int,209,数组
From: https://www.cnblogs.com/18191xq/p/17840958.html

相关文章

  • CF985C 题解
    CF985C题解思路由题意得知,现在有$n\timesk$块木板需要组装成$n$个木桶,每个木桶由$k$块板组成,容量服从短板原理,要求容量差不得超过$I$,求最大容量和。不管采用什么方法,无疑我们首先需要将板长(数组$a$)从小到大排列。利用贪心算法。先找出与$a_0$的长度差不超过$l$的......
  • 21207106-xuesong
    菜单系列题及期中总结一、前言这次博客是主要对菜单系列题目和期中题目总结,菜单系列题目包括菜单计价程序-3、菜单计价程序-4、菜单计价程序-5,菜单系列题目,主要是考察对类的创建,怎么设计合适的类,类与类之间的关系,考察了封装,继承,依赖等。其次是考察对正则表达式判断输入格......
  • requests+编码模块+百度贴吧数据抓取
    1.查看本地发送过去的头文件importrequestshtml=requests.get(url='http://httpbin.org/get').textprint(html)2.编码模块使用  //使用原因:URL不能识别中文编码,中文转换为编码模式)(1)urlencode()方法fromurllibimportparseparams=parse.urlencode({'wd':'赵丽颖'})......
  • 测试
    这是一个测试目录这是一个测试基础知识点笔记1.字体居中和改变字体大小2.HTML一些知识点3.注脚4.改变文本位置、大小、颜色基础知识点缩进使用全角空格(切换快捷键shift+空格)。即:在全角输入状态下直接使用空格键就ok了添加空一行使用<br>保持他的前面有两个空......
  • 脱单法则
    社牛,自信,主动,撤退,不流通详细来讲就是1.打开社交圈,周围的或者社会认识2..自信是制胜法宝。与他人交往不能流露出自己的负能量3.主动认识他人4,.假如冷落你就及时止损5.永远相信优质的人不会像货币一样会流通,不要与老油条交往......
  • 第十二周Linux学习报告
    本周学习的是上周没有讲完的磁盘管理以及新学习的文件查找、打包压缩及解压磁盘管理1、修改挂载点的配置文件,目录在/etc/fstab,使用vim修 文件查找、打包压缩以及解压1、which命令查找符合条件的命令文件,可查看其是否存在以及执行的位置  2、locate命令可以让用户快速......
  • AtCoder Beginner Contest(abc) 296
    B-Chessboard难度:⭐题目大意给定一个8*8的字符矩阵,其中只有一个'*',输出它的坐标;其坐标的列用字母表示,行用数字表示,具体看样例解释;解题思路签到题不多嗦了;神秘代码#include<bits/stdc++.h>#defineintlonglong#defineIOSios::sync_with_stdio......
  • 数组类算法题——删除有序数组中的重复项
    删除有序数组中的重复项题目:给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的......
  • 初来乍到,我的第一篇博客
    大家好,我叫遍历千百遍的二进制,是一名大学生,同时也是一个编程小萌新,希望能在这里记录下我学习编程的成长史。首先,学习编程是因为大学专业就是这个(前景好嘛),其次我也比较喜欢计算机方面的,我的目标就是成为计算机大牛,然后进入大厂最好是华为(做梦ing⊙▽⊙)。其次,我打算在大学生活......
  • QFileInfo
    QFileInfo #include<QFileInfo> PublicFunctions QFileInfo() QFileInfo(constQString&file) QFileInfo(constQFile&file) QFileInfo(constQDir&dir,constQString&file) QFileInfo(constQFileInfo&fileinfo)......