成都市双流区建设局官方网站移动端网站建设公司
成都市双流区建设局官方网站,移动端网站建设公司,站长工具百度百科,医院网站建设要求是什么LeetCode209——长度最小的子数组
题目描述#xff1a;
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] #xff0c;并返回其长度。如果不存在符合条件的子数…LeetCode209——长度最小的子数组
题目描述
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] 并返回其长度。如果不存在符合条件的子数组返回 0 。
1.Result01(两层for循环)
暴力解两层for循环依次寻找并不断更新子序列长度值。 时间复杂度有点高——ON2。 public static int minSubArrayLen(int target, int[] arr) {int min Integer.MAX_VALUE;//记录当前子序列长度最小值 初始值设为Integer类的常量MAX_VALUEfor (int i 0; i arr.length; i) {int sum arr[i];//变量sum用于记录子序列中数据之和if (sum target)//第一个元素就满足即最小子序列长度为1return 1;for (int j i 1; j arr.length; j) {sum arr[j];//在增加子序列长度的同时 累加子序列数据之和if (sum target) {//满足条件之后 更新当前最短子序列长度的值min Math.min(min, j - i 1);break;//跳出内部循环 继续从外部循坏开始往后找}}}return min Integer.MAX_VALUE ? 0 : min;//min值仍为初始值未改变的话 即不存在符合条件的子数组 返回0}2.Result02滑动窗口
滑动窗口不断地调节子序列的起止位置和终止位置从而得出我们想要的结果。
窗口就是 满足其和 ≥ target 的长度最小的 连续 子数组。
窗口的起始位置如何移动如果当前窗口的值大于target了窗口就要向前移动了也就是该缩小了。
窗口的结束位置如何移动窗口的结束位置就是遍历数组的指针也就是for循环里的索引。
滑动窗口详解链接代码随想录 public int minSubArrayLen(int target, int[] arr) {int left 0;//滑动窗口的起始位置int sum 0;//滑动窗口内数值之和int result Integer.MAX_VALUE;//初始值for (int right 0; right arr.length; right) {sum arr[right];//存滑动窗口中的数值之和while (sum target) {//当窗口内元素满足条件的时候 开始缩小窗口result Math.min(result, right - left 1);//更新窗口最小值sum - arr[left];//减去窗口中删去的元素值left;//缩小窗口起始位置}}return result Integer.MAX_VALUE ? 0 : result;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89758.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!