数组|leetcode209.长度最小的子数组
給定一個(gè)含有 n 個(gè)正整數(shù)的數(shù)組和一個(gè)正整數(shù) target 。
找出該數(shù)組中滿足其和 ≥ target 的長(zhǎng)度最小的 連續(xù)子數(shù)組 [numsl, numsl+1, …, numsr-1, numsr]
,并返回其長(zhǎng)度。如果不存在符合條件的子數(shù)組,返回 0 。
示例 1:
輸入:target = 7, nums = [2,3,1,2,4,3] 輸出:2 解釋:子數(shù)組 [4,3] 是該條件下的長(zhǎng)度最小的子數(shù)組。
示例 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進(jìn)階:
如果你已經(jīng)實(shí)現(xiàn) O(n) 時(shí)間復(fù)雜度的解法, 請(qǐng)嘗試設(shè)計(jì)一個(gè) O(n log(n)) 時(shí)間復(fù)雜度的解法。來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-size-subarray-sum
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
暴力遍歷
class Solution {public int minSubArrayLen(int target, int[] nums) {int min = Integer.MAX_VALUE;int sum = 0; //子序列數(shù)值之和for (int i = 0; i < nums.length;i++){sum = 0;for(int j = i;j < nums.length;j++){sum+=nums[j];if(sum >= target){int len = j - i + 1 ; //子序列長(zhǎng)度min = len < min ? len : min;//取較短的長(zhǎng)度break;} }}//如果沒(méi)有找到min還依然等于最初賦值return min == Integer.MAX_VALUE ? 0 : min;} }
時(shí)間復(fù)雜度O(n^2)
空間復(fù)雜度O(1)
雙指針(滑動(dòng)窗口)
class Solution {public int minSubArrayLen(int target, int[] nums) {int min = Integer.MAX_VALUE;int i = 0, j = 0,sum = 0;for(j = 0 ; j < nums.length; j++){sum += nums[j];while(sum >= target){int len = j - i + 1;min = len < min ? len : min;sum -= nums[i++];}}return min == Integer.MAX_VALUE ? 0 : min;} }總結(jié)
以上是生活随笔為你收集整理的数组|leetcode209.长度最小的子数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 遗传算法的基本步骤是什么
- 下一篇: 数组|leetcode59.螺旋矩阵II