leetcode209--长度最小的子数组

1. 题意

找到最小满足和大于 t a r g e t target target的子数组长度。
长度最小的子数组

2. 题解

2.1 滑动窗口
cpp 复制代码
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {

        int l = 0;
        int sum = 0;
        int sz = nums.size();
        int ans = INT_MAX;
        for (int i = 0; i < sz; ++i) {
            sum += nums[i];

            if ( sum >= target) {

                while ( l <= i && sum >= target) {
                    sum -= nums[l];
                    ++l;
                }
                ans = min(ans, i - l + 2);
            }

        }

        return ans == INT_MAX ? 0 : ans;
    }
};
2.2 二分

枚举左端点,二分查找满足条件的右端点。

cpp 复制代码
class Solution {
public:
    bool check(int l, int r, vector<int> &nums, int target)
    {
        int sum = 0;
        for (int i = l; i < r + 1; ++i)
            sum += nums[i];
        
        return sum >= target;
    }

    int minSubArrayLen(int target, vector<int>& nums) {

        int l = 0;
        int sum = 0;
        int sz = nums.size();
        int ans = INT_MAX;


        vector<int> pre(sz + 1, 0);
        int preSum = 0;
        for (int i = 0;i < sz; ++i) {
            preSum += nums[i];
            pre[i + 1] = preSum;
        }

        
        for (int i = 0;i < sz; ++i) {
            
            int l = i;
            int r = sz;

            while (l < r) {
                int m = ((r - l) >> 1) + l;

               // cout << "m"<< m << "," << "sum" << sum << endl; 
                if ( pre[m + 1] - pre[i] < target)
                    l = m + 1;
                else
                    r = m;

            }
           // printf("%d,%d\n", i, l);
            if ( l < sz){
                ans = min(l - i + 1, ans);
            }
        }


        return ans == INT_MAX ? 0 : ans;
    }
};
相关推荐
梁辰兴38 分钟前
数据结构:排序
数据结构·算法·排序算法·c·插入排序·排序·交换排序
野犬寒鸦1 小时前
力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
java·数据结构·算法·leetcode·面试
菜鸟得菜1 小时前
leecode kadane算法 解决数组中子数组的最大和,以及环形数组连续子数组的最大和问题
数据结构·算法·leetcode
楼田莉子2 小时前
C++算法专题学习——分治
数据结构·c++·学习·算法·leetcode·排序算法
一支鱼2 小时前
leetcode常用解题方案总结
前端·算法·leetcode
ulias2122 小时前
各种背包问题简述
数据结构·c++·算法·动态规划
m0_570466412 小时前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
吃着火锅x唱着歌3 小时前
LeetCode 1537.最大得分
算法·leetcode·职场和发展
数模加油站3 小时前
25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
算法·数学建模·数模国赛·高教社杯全国大学生数学建模竞赛
ulias2123 小时前
动态规划入门:从记忆化搜索到动态规划
算法·动态规划