LeetCode:209. 长度最小的子数组

简介: 题目描述:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和≥ target的长度最小的连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回0。

🍎道阻且长,行则将至。🍓


🌻算法,不如说它是一种思考方式🍀


算法专栏: 👉🏻123


一、🌱209. 长度最小的子数组

  • 题目描述:给定一个含有 n 个正整数的数组和一个正整数 target 。

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

  • 来源:力扣(LeetCode)
  • 难度:中等
  • 提示:

1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105

  • 示例 1:

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

🌴解题

1.暴力查找

直接使用两层for循环,最终找到最短子数组。所以时间复杂度是O(n^2^)。

2.双指针滑动法

我们有可能只遍历一遍数组就可以得到最短子数组:
step1:当我们遍历数组找到第一个复合条件的子数组时(例如从0到5的子数组),长度length赋值;
step2:我们就可以把当前子数组的第一个删去(例如从1到5的),子数组长度length -1;
==◇==判断当前子数组会不会满足target,满足则继续step2,直到不满足条件时(4到5的),找数组下一个(4到6的)。所以以上过程就是使用两个指针来完成。

  • code:
class Solution {
    publicint minSubArrayLen(int target, int[] nums) {
        int k=0;//从这个开始
        int i=0;//到这个
        int sum=0;//k到i的和
        int ans=0;//没找到
        sum+=nums[i];
        for(;k<nums.length;k++) {
            while (sum < target&&i< nums.length) {
                i++;
                if(i==nums.length)
                    break;
                sum+=nums[i];
            }

            if(sum>=target) {//找到了
                if (ans == 0) {
                    ans = i - k + 1;
                } else
                    ans = ans > i - k + 1 ? i - k + 1 : ans;//是否更短子数组
                sum -= nums[k];//从k下一个
            }
        }
        return ans;
    }
}

image.png


返回第一页。☝


☕物有本末,事有终始,知所先后。🍭

相关文章
|
4月前
|
算法 Python
【Leetcode刷题Python】子数组查找
一个用于寻找给定字符串中最长重复子串的Python函数实现,采用了滑动窗口的方法来检测重复的子串。
21 1
|
4月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
43 0
|
6月前
|
算法 测试技术 程序员
力扣经典150题第三十题:长度最小的子数组
力扣经典150题第三十题:长度最小的子数组
31 1
|
6月前
|
存储
力扣-2904最短且字典序最小的美丽子序列
力扣-2904最短且字典序最小的美丽子序列
38 1
|
5月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
技术经验解读:【LeetCode】560.SubarraySumEqualsK子数组和为K
技术经验解读:【LeetCode】560.SubarraySumEqualsK子数组和为K
|
7月前
|
人工智能
力扣100114. 元素和最小的山形三元组 II(中等)
力扣100114. 元素和最小的山形三元组 II(中等)
|
6月前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
7月前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
43 0
|
7月前
leetcode代码记录(长度最小的子数组
leetcode代码记录(长度最小的子数组
35 0