桂林北京网站建设,wordpress用户系统,连云港市海州区建设局网站,怎么建设自己的卡盟网站题目
给定一个含有 n 个正整数的数组和一个正整数 s #xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组#xff0c;并返回其长度。如果不存在符合条件的子数组#xff0c;返回 0。
示例#xff1a;
输入#xff1a;s 7, nums [2,3,1,2,4,3] 输出#…题目
给定一个含有 n 个正整数的数组和一个正整数 s 找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组并返回其长度。如果不存在符合条件的子数组返回 0。
示例
输入s 7, nums [2,3,1,2,4,3] 输出2 解释子数组 [4,3] 是该条件下的长度最小的子数组。 提示
1 target 10^9 1 nums.length 10^5 1 nums[i] 10^5
思路
因为是最小的 连续 子数组 可以考虑使用滑动窗口。
窗口值sum 开始到结束位置的值的和窗口结束位置 front 一直向后遍历当窗口值大于目标值时停止下来窗口开始位置 behind 窗口值大于等于目标值时向前移动
实现
class Solution {public int minSubArrayLen(int target, int[] nums) { int behind 0;int sum 0;int minLen Integer.MAX_VALUE;//这里初始化的值为最大值因为等下要比较的是最小值for(int front 0; front nums.length; front){// front 一直向后遍历当窗口值大于目标值时停止下来sum nums[front]; while (sum target){minLen Math.min(front - behind 1,minLen);sum sum - nums[behind];behind ;//窗口开始位置 behind 窗口值大于等于目标值时向前移动}}return minLen Integer.MAX_VALUE ? 0 : minLen;}}