力扣 209. 长度最小的子数组
1、原始题目链接
https://leetcode-cn.com/problems/minimum-size-subarray-sum/
2、思路分析
题目的要求是找到刚好大于或者等于阈值的子数组的元素个数;
进行两层遍历,在遍历的时候,i 为子数组的起始位置 j 为子数组的结束位置;
- 第一层循环保证所有的数字都作为子数组的起始位置;
- 第二层循环,保证所有的数字都作为子数组的结束位置;
- 当 sum 刚好大于等于阈值的时候,说明找到了一个子数组,至于是不是长度最小的子数组需要下面的判断;
- 判断:如果此次的起始终止中间的数字长度小于以前的最小子数组长度,更新子数组并且长度将循环退出来(更新是为了始终得到最下的子数组);
3、基于暴力破解的寻找数组的最小子数组代码实现
public class 创建长度最小的子数组 {
// 设置 32 位的最大值
public static int INT32_MAX = 2147483647;
/**
*传递数组,阈值,找到最小的子数组
* @param nums 寻找长度最小的子数组的原始数组
* @param s 寻找最小的子数组的阈值
* @return
*/
public static int minSubArrayLen(int[] nums, int s) {
int result = INT32_MAX; // 最终的结果
int sum = 0; // 获取到的子序列的数值之和
int subLength = 0; // 子序列的长度
for (int i = 0; i < nums.length; i++) { // 设置子序列起点为i
sum = 0;
for (int j = i; j < nums.length; j++) { // 设置子序列终止位置为j
sum += nums[j]; // 刚开始的 j = i 都是 0 ,i 保持不动,j 进行移动,寻找刚好大于目标数值的最小子序列
if (sum >= s) { // 一旦发现子序列和超过了s,更新result
subLength = j - i + 1; // 取子序列的长度 终止的减去开始的就是数字之间的间隔,间隔加一就是数字的个数,一个间隔但是存在两个数字
result = result < subLength ? result : subLength; // 始终选取比较小的 满足结果的数量
break; // 因为我们是找符合条件最短的子序列,所以一旦符合条件就break
}
}
}
// 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
return result == INT32_MAX ? 0 : result; // 三目运算符,比较得到的结果
}
public static void main(String[] args) {
int[] nums = {2, 3, 1, 2, 4, 3};
int length = minSubArrayLen(nums, 7);
int length1 = minArrayLen(nums, 7);
System.out.println("长度最小的子数组中包含的元素个数为:" + length);
System.out.println("长度最小的子数组中包含的元素个数为:" + length1);
}
/**
*传递数组,阈值,找到最小的子数组
* @param arr 寻找长度最小的子数组的原始数组
* @param target 寻找最小的子数组的阈值
* @return
*/
public static int minArrayLen(int[] arr, int target) {
int result = 100;
int sum;
int subLen = 0;
for (int i = 0; i < arr.length; i++) {
sum = 0;
for (int j = i; j < arr.length; j++) {
sum += arr[j];
if (sum >= target) { // 注意找到的最小的子数组,这里是有等于号的,在实际中需要注意
subLen = j - i + 1;
result = result < subLen ? result : subLen;
break;
}
}
}
return result;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!