力扣209-长度最小的子数组(Java,双指针解法)
209. 长度最小的子数组 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/minimum-size-subarray-sum/
思路:
这个题不能先排序呀!数是随机的!
一开始拿到这个题想到的是能不能用动态规划做,看着有点眼熟。但是想了想发现我不会,二维数组能表示的量不够,所以把思路转到专门的数组问题上。而这个数组处理的手段首先想到双指针。(不知道用双指针属于单纯的知识漏洞,不是问题;知道用双指针,知道双指针的思路和写法,但是写不出来才是问题)
思路就是设立快慢指针,总和sum和长度len(由于题里给了数组的长度限制,所以len一开始可以初始化为一个具体的值,比数组长度大1,这样就解决[1,1],target=2的例子),快指针遍历数组,sum加上fast对应的每个元素,一旦sum>=target,那么说明当前:
1.至少找到一个符合要求的序列,比对len与当前长度fast-slow的长度,取最小值;
2.该序列可能不是最优解,需要再次判断。
此时为了看是不是还能有更小的len,在保证sum满足要求的情况下,快指针不动,向数组末尾移动慢指针,同时sum减去慢指针所指的值,一并更新len的长度。
这样下来最后len如果从未被改变过,说明没有符合要求的序列,输出0;否则输出len即是最小长度。
class Solution {public int minSubArrayLen(int target, int[] nums) {int slow = 0,fast=slow;int len=100001,sum=0;while(fast<nums.length){sum+=nums[fast];while(sum>=target){len = Math.min(fast-slow,len);sum -= nums[slow];slow++;}fast++;}return len==100001?0:len+1;}
}
力扣209-长度最小的子数组(Java,双指针解法)相关推荐
- 209 长度最小的子数组(双指针)
1. 问题描述: 给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满足其和 ≥ target 的长度最小的连续子数组 [numsl, numsl+1, ..., numsr- ...
- 209. 长度最小的子数组(中等 数组 滑动窗口)
209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, -, n ...
- 力扣209. 长度最小的子数组
题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, ...
- 代码随想录算法训练营第二天|LeetCode 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II
LeetCode 977.有序数组的平方 题目链接:977.有序数组的平方 思路: 1.先对每个数进行遍历平方,并插入新的容器中 2.对容器进行排序,返回就可以了 缺陷:开辟了新的容器空间 class ...
- 【宫水三叶的刷题日记】209. 长度最小的子数组(中等)
题目描述 这是 LeetCode 上的 209. 长度最小的子数组 ,难度为 中等. Tag : 「前缀和」.「二分」 给定一个含有 n 个正整数的数组和一个正整数 target. 找出该数组中满足其 ...
- LeetCode 209. 长度最小的子数组 (滑动窗口)
LeetCode 209. 长度最小的子数组 class Solution {public int minSubArrayLen(int s, int[] nums) {int start = 0;i ...
- 代码随想录算法训练营第二天 | LeetCode977有序数组的平方 、209长度最小的子数组、 59.螺旋矩阵II
--------------------------- 977.有序数组的平方 #include <iostream> #include <algorithm> #includ ...
- LeetCode 209. 长度最小的子数组(滑动窗口)
1. 题目 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组. 如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, num ...
- Leetcode 209. 长度最小的子数组 解题思路及C++实现
解题思路: 定义两个指针 left 和 right,构成一个滑动窗口,当窗口内的数值和小于 s 时,右指针向右滑动,当窗口内的数值和大于等于 s 时,就要更新一次 子数组的最小长度了.同时 左指针向右 ...
- 10. Leetcode 209. 长度最小的子数组 (数组-同向双指针-滑动窗口)
给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr ...
最新文章
- php cros跨域处理,php接口设置cors实现ajax跨域
- JS中的Math.ceil和Math.floor函数的用法
- Git内部原理之深入解析Git对象
- ios UITableview 刷新某一个cell 或 section
- java spring初始化_Spring框架初始化解析
- delphi 组件安装教程详解
- Flutter 修改自带Switch,实现轻量自定义Switch,使用screen_utils适配大屏
- ipa java_Java 解析 IPA 文件,读取 Info.plist 信息
- 11岁的Tumblr:开启艰难禁黄之路
- 基于51单片机的校园教室打铃系统
- Linux模拟试题及答案(全)
- Oracle heap 表的主键 dump 分析
- 用数字签名实现防篡改
- java学习笔记(file类):
- elo匹配算法c语言,匹配算法全面解析:采用国际通用“ELO等级分系统”
- 电机与matlab突然,同步电机的三相突然短路的MATLAB计算
- jaeger 是很么软件_JAEGER软件
- Hadoop集群安装及其配置(三台虚拟机)
- 计算机毕业设计JAVA海滨体育馆管理系统mybatis+源码+调试部署+系统+数据库+lw
- 通过bat批处理命令进行adb push批量拉取文件