zoukankan      html  css  js  c++  java
  • 刷题-力扣-209. 长度最小的子数组

    209. 长度最小的子数组

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给定一个含有 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)) 时间复杂度的解法。

    题目分析

    1. 根据题目描述,求最小子数组的长度使之大于等于目标值
    2. 设置两个指针front和rear,若front和rear之间的和小于target,front+1,否则rear+1
    3. 当front遍历完nums后,取最小的front与rear的差

    代码

    class Solution {
    public:
        int minSubArrayLen(int target, vector<int>& nums) {
            if (nums.size() == 0) { return 0; }
            int front = 0;
            int rear = 0;
            int sum = 0;
            int minNum = INT_MAX;
            while (front < nums.size()) {
                sum += nums[front];
                while (sum >= target) {
                    minNum = min(minNum, front - rear + 1);
                    sum -= nums[rear++];
                }
                ++front;
            }
            return minNum == INT_MAX ? 0 : minNum;
        }
    };
    
  • 相关阅读:
    第一个Struts1步骤
    struts框架学习过程中的问题
    struts2笔记
    搭建struts2框架
    一个系统钩子
    TMemIniFile 与TIniFile 区别
    rc4加密
    注册dll
    delphi 功能函数大全-备份用
    VC中文件路径问题
  • 原文地址:https://www.cnblogs.com/HanYG/p/15264386.html
Copyright © 2011-2022 走看看