网站首页 > 教程分享 正文
长度最小的子数组
题目描述:给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [nums l, numsl+1?, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:滑动窗口
首先,判断特殊情况,如果数组为空,直接返回0。
否则,使用滑动窗口法来判断是否存在最小的连续子数组,具体处理逻辑如下:
首先,声明滑动窗口的左右边界,并用minLen记录最小的连续子数组的长度;
遍历数组,直到右边界遍历到原数组的最后一个数字位置;
计算当前范围的连续子数组的和,判断当前的和是否比target小,如果不小于,则将窗口的左边界右移,并且判断当前的连续长度是否是最小的;如果小于,则将窗口的右边界右移。
最后,判断minLen是否已找到,如果不存在则返回0;否则,返回minLen。
public class LeetCode_209 {
/**
* 滑动窗口
*
* @param target 目标值
* @param nums 原数组
* @return
*/
public static int minSubArrayLen(int target, int[] nums) {
// 如果数组为空,直接返回0
if (nums == null || nums.length == 0) {
return 0;
}
// 记录最小的连续子数组的长度
int minLen = Integer.MAX_VALUE;
// 滑动窗口的左右边界
int left = 0, right = 0;
// 遍历直到右边界遍历到原数组的最后一个数字位置
while (right < nums.length) {
int sum = 0;
// 计算当前范围的连续子数组的和
for (int i = left; i <= right; i++) {
sum += nums[i];
}
// 判断当前的和是否比target小,如果不小于,则将窗口的左边界右移,并且判断当前的连续长度是否是最小的;如果小于,则将窗口的右边界右移
if (sum >= target) {
minLen = Math.min(minLen, right - left + 1);
left++;
} else {
right++;
}
}
if (minLen == Integer.MAX_VALUE) {
return 0;
}
return minLen;
}
public static void main(String[] args) {
// 测试用例一,期望输出: 2
System.out.println(minSubArrayLen(7, new int[]{2, 3, 1, 2, 4, 3}));
// 测试用例二,期望输出: 0
System.out.println(minSubArrayLen(11, new int[]{1, 1, 1, 1, 1, 1, 1, 1}));
}
}
【每日寄语】 人生像攀登一座山,而找山寻路,却是一种学习的过程,应当在这过程中,学习笃定、冷静,学习如何从慌乱中找到生机。
猜你喜欢
- 2024-09-17 c语言 数组(c语言数组定义)
- 2024-09-17 VBA数组与字典解决方案的第17讲:工作表数组大小扩展及意义
- 2024-09-17 Linux编程Shell之入门——Shell获取数组长度
- 2024-09-17 HashMap数组长度为什么是2的n次方
- 2024-09-17 2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums
- 2024-09-17 VBA中动态数组的定义及创建(vba 动态)
- 2024-09-17 C语言数组那些事儿,C语言基础教程之数组
- 2024-09-17 一文看懂PG数据类型之数值类型、字符类型、日期类型、数组类型
- 2024-09-17 C语言基础之数组(c语言数组语句)
- 2024-09-17 2023-12-20:用go语言,给定一个数组arr,长度为n,在其中要选两
你 发表评论:
欢迎- 最近发表
-
- 有了这份900多页的Android面试指南,你离大厂Offer还远吗?
- K2 Blackpearl 流程平台总体功能介绍:常规流程功能
- 零基础安卓开发起步(一)(安卓开发入门视频)
- 教程:让你的安卓像Windows一样实现程序窗口化运行
- Android事件总线还能怎么玩?(事件总线有什么好处)
- Android 面试被问“谈谈架构”,到底要怎样回答才好?
- Android开发工具Parcel和Serialize
- Android 中Notification的运用(notification widget安卓)
- Android退出所有Activity最优雅的方式
- MT管理器-简单实战-去除启动页(mt管理器怎么去除软件弹窗)
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)