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

长度最小的子数组

时间:2024-03-19 20:35:12浏览次数:22  
标签:target int sum 最小 result 数组 长度

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)

题目:
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。
对于这道题我们可以使用滑动窗口来写,定义一个sum来存储子数组的值,reslut用来定义一个较大的值,因为我们后面要拿它进行比较大小,然后定义两个指针,j在前面遍历数组,sum用来把j遍历数组的值加起来,也就是我们的子数组,它是用来和我们的target比大小,当sum的值加起来大于等于target的时候,这个时候就是存在长度最小的子数组,我们可以使用Math.min()计算出最小值,子数组的长度该怎么计算呢,我们可以使用数组末尾减去数组开始,但数组的索引是从0开始的,所以我们还需要加1,就变成了j-i+1,。那么找出来过后,我们是不是需要考虑sum的值,是不是需要把它前面加的值都减去,如果不减去的话,sum的值会一直增大,后面就会一直比较,但它会选择我们第一次满足sum>target条件的数组长度,因为如果这么循环下去的话,我们的数组长度是越来越长的,再继续比大小就没有什么意义了,所以可以写成sum-=num[i++];然后再后面选择一个比较大的数和数组长度进行比大小就行了,如果等于那个大值就是不存在符合条件的子数组返回0,否则返回子数组长度,这个就是长度最小的子数组了。
附上代码:

class Solution {     public int minSubArrayLen(int target, int[] nums) {         int sum=0;         int result=Integer.MAX_VALUE;         int i=0;         for(int j=0;j<nums.length;j++){             sum+=nums[j];             while(sum>=target){                 result=Math.min(result,j-i+1);                 sum-=nums[i];                 i++;             }         }         return result ==Integer.MAX_VALUE ? 0:result;     } }

 

标签:target,int,sum,最小,result,数组,长度
From: https://www.cnblogs.com/feng-233/p/18083885

相关文章

  • PostgersSQL 数组类型
    什么是数组列?数组列是一种特殊的数据类型,它可以在单个数据库列中存储多个值。与传统的单值列不同,数组列允许我们将多个相关值组合成一个实体。例如,在一个名为”tags”的表中,我们可以使用数组列来存储一篇文章的多个标签。 如何在PostgreSQL中创建数组列?在PostgreSQL中,我们可......
  • js数组方法详解
    数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响。 创建数组一.字面量方式constarray=[1,2,3,4,5]; 二.使用Array构造方法1.无参构造-创建一个长度为0的空数组constarray......
  • react使用map循环渲染dom时,增加或删减数组,但想保持其余的dom与数据不发生改变
     核心思路:dom渲染与key值有关系,如果想实现上述需求,则需要关注改变前后的循环项的key值是否发生改变currentCabinet?.map((item,index)=><BaseInfokey={`currentCabinet${item?.ciId}`}sceneKey={sceneKey}currentCabinet={item}/>)如以上示例,以ciId为key值,可以保证即......
  • 数组的reduce 的使用和扁平化处理
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title></hea......
  • java数据结构与算法刷题-----LeetCode1005. K 次取反后最大化的数组和(这就不是简单题)
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846卷来卷去,把简单题都卷成中等题了文章目录1.排序后从小到大取负2.hash表从小到大排序,省掉排序(这就是为什......
  • 76. 最小覆盖子串c
    booljudge(int*s,int*t){for(inti=0;i<200;i++){if(s[i]<t[i])returnfalse;}returntrue;}char*minWindow(char*s,char*t){intns=strlen(s),nt=strlen(t);char*temp=(char*)malloc(sizeof(char));temp[0]=0;......
  • 1793.好子数组的最大分数(力扣每日一题)
    1793.好子数组的最大分数给你一个整数数组nums(下标从0开始)和一个整数k。一个子数组(i,j)的分数定义为min(nums[i],nums[i+1],...,nums[j])*(j-i+1)。一个好子数组的两个端点下标需要满足i<=k<=j。请你返回好子数组的最大可能分数。 示例......
  • 06_C++多维数组
    多维数组,数组指针在二维数组上的应用。#include<iostream>#include<stdio.h>usingnamespacestd;intmain(){intarr[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};int(*p)[5]=arr;cout<<"*p:"<<*p<<endl......
  • 【LeetCode 1793 】好子数组的最高分数
    题目描述原题链接:LeetCode.1793好子数组的最高分数解题思路分数由子数组最小值和长度决定,而且确定了子数组必须包含nums[k]的值;从k位置分别向左向右找更小值就是每个子数组的最小值,左右两端边界下标也就确认了子数组长度;直观朴素的解法是利用单调栈将向左向右分别严格递......
  • 238. 除自身以外数组的乘积(中)
    目录题目题解:两遍前缀和题目给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在O(n)时间复杂度内完成此题......