当前位置: 首页 > news >正文

04算法学习_209.长度最小的子数组

  • 04算法学习_209.长度最小的子数组
    • 题目描述:
    • 个人代码:
    • 学习思路:
      • 第一种写法:
        • 题解关键点:
      • 第二种写法:
        • 题解关键点:
      • 个人学习时疑惑点解答:

04算法学习_209.长度最小的子数组

力扣题目链接: 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提示:1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104

个人代码:

暴力解法

后面力扣更新了数据,暴力解法已经超时了

双指针(快慢指针法)

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

学习思路:

滑动窗口思路

第一种写法:

题解关键点:

力扣更新数据后暴力法已无法使用

代码参考:

xxx

第二种写法:

题解关键点:

代码参考:

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

个人学习时疑惑点解答:

注意点:一层for循环是while循环结束才进新的for循环,
所以while能把left++后的sum排完;

注:该专栏算法参考 : “代码随想录”(程序员卡尔)进行学习。

相关文章:

  • MCP Server开发使用Pixabay网址搜索图片
  • TypeScript 泛型讲解
  • 《微服务架构设计模式》笔记
  • 基于Matlab建立不同信道模型
  • 鸿蒙HarmonyOS 【ArkTS组件】通用属性-背景设置
  • 腾讯游戏安全与高通合作构建PC端游安全新格局
  • Unity异步加载image的材质后,未正确显示的问题
  • 693SJBH基于.NET的题库管理系统
  • Windows Docker笔记-扩展
  • C++ - 仿 RabbitMQ 实现消息队列(3)(详解使用muduo库)
  • docker面试题(5)
  • 【C++ Primer 学习札记】智能指针
  • selenium——元素定位
  • Java 定时任务中Cron 表达式与固定频率调度的区别及使用场景
  • Unity-编辑器扩展-其二
  • auto关键字解析
  • 【算法】滑动窗口(细节探究,易错解析)5.21
  • 使用Vite创建一个动态网页的前端项目
  • IGBT的结电容大小对实际使用有哪些影响,双脉冲测试验证
  • Cmake 使用教程
  • 武汉网站多少/百度推广怎么找客户
  • 知道抖音视频是怎么做的网站嘛/培训机构哪家好