门户网站营销特点,一级消防工程师考试地点,郑州网站制作生产厂商定制,常用的网络营销推广方法有哪些给定一个含有 n 个正整数的数组和一个正整数 s #xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组#xff0c;并返回其长度。如果不存在符合条件的子数组#xff0c;返回 0。
示例#xff1a;
输入#xff1a;s 7, nums [2,3,1,2,4,3]输出#xff1a;2…
给定一个含有 n 个正整数的数组和一个正整数 s 找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组并返回其长度。如果不存在符合条件的子数组返回 0。
示例
输入s 7, nums [2,3,1,2,4,3]输出2解释子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2
输入target 4, nums [1,4,4]
输出1
提示
1 target 10^91 nums.length 10^51 nums[i] 10^5
思路1暴力解法复杂度大
class Solution {public int minSubArrayLen(int target, int[] nums) {int result 0xFFFF; // 最终的结果int sum 0; // 子序列的数值之和int subLength 0; // 子序列的长度for (int i 0; i nums.length; i) { // 设置子序列起点为isum 0;for (int j i; j nums.length; j) { // 设置子序列终止位置为jsum nums[j];if (sum target) { // 一旦发现子序列和超过了s更新resultsubLength j - i 1; // 取子序列的长度result result subLength ? result : subLength;break; // 因为我们是找符合条件最短的子序列所以一旦符合条件就break}}}// 如果result没有被赋值的话就返回0说明没有符合条件的子序列return result 0xFFFF ? 0 : result;}
}
思路2看到关键词连续 想到滑动窗口 窗口大小由left和right指针决定
class Solution {public int minSubArrayLen(int target, int[] nums) {int left 0;int sum 0;int result Integer.MAX_VALUE;for (int right 0; right nums.length; right) {sum nums[right]; // 扩大窗口while (sum target) {result Math.min(result, right - left 1);sum - nums[left]; // 去掉滑动窗口第一个值 缩小窗口}}return result Integer.MAX_VALUE ? 0 : result;}
}