From 8ca953ae3a76abf1d9aef50740d1ec0b98e3001a Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Fri, 13 Aug 2021 16:24:32 +0800 Subject: [PATCH] =?UTF-8?q?209:=E9=95=BF=E5=BA=A6=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E7=9A=84=E5=AD=90=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editor/cn/MinimumSizeSubarraySum.java | 81 +++++++++++++++++++ .../editor/cn/MinimumSizeSubarraySum.md | 46 +++++++++++ 2 files changed, 127 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.java create mode 100644 src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.md diff --git a/src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.java b/src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.java new file mode 100644 index 0000000..627029d --- /dev/null +++ b/src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.java @@ -0,0 +1,81 @@ +//给定一个含有 n 个正整数的数组和一个正整数 target 。 +// +// 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长 +//度。如果不存在符合条件的子数组,返回 0 。 +// +// +// +// 示例 1: +// +// +//输入:target = 7, nums = [2,3,1,2,4,3] +//输出:2 +//解释:子数组 [4,3] 是该条件下的长度最小的子数组。 +// +// +// 示例 2: +// +// +//输入:target = 4, nums = [1,4,4] +//输出:1 +// +// +// 示例 3: +// +// +//输入:target = 11, nums = [1,1,1,1,1,1,1,1] +//输出:0 +// +// +// +// +// 提示: +// +// +// 1 <= target <= 109 +// 1 <= nums.length <= 105 +// 1 <= nums[i] <= 105 +// +// +// +// +// 进阶: +// +// +// 如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。 +// +// Related Topics 数组 二分查找 前缀和 滑动窗口 +// 👍 723 👎 0 + +package leetcode.editor.cn; + +//209:长度最小的子数组 +class MinimumSizeSubarraySum { + public static void main(String[] args) { + //测试代码 + Solution solution = new MinimumSizeSubarraySum().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public int minSubArrayLen(int target, int[] nums) { + int sum = 0; + int start = 0; + int min = Integer.MAX_VALUE; + for (int i = 0; i < nums.length; i++) { + sum += nums[i]; + if (sum >= target) { + while (sum >= target) { + sum -= nums[start]; + start++; + } + min = Math.min(min, i - start + 2); + } + } + return min == Integer.MAX_VALUE ? 0 : min; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.md b/src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.md new file mode 100644 index 0000000..be18656 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/MinimumSizeSubarraySum.md @@ -0,0 +1,46 @@ +

给定一个含有 n 个正整数的数组和一个正整数 target

+ +

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0

+ +

 

+ +

示例 1:

+ +
+输入:target = 7, nums = [2,3,1,2,4,3]
+输出:2
+解释:子数组 [4,3] 是该条件下的长度最小的子数组。
+
+ +

示例 2:

+ +
+输入:target = 4, nums = [1,4,4]
+输出:1
+
+ +

示例 3:

+ +
+输入:target = 11, nums = [1,1,1,1,1,1,1,1]
+输出:0
+
+ +

 

+ +

提示:

+ + + +

 

+ +

进阶:

+ + +
Related Topics
  • 数组
  • 二分查找
  • 前缀和
  • 滑动窗口
  • \n
  • 👍 723
  • 👎 0
  • \ No newline at end of file