数组二:长度最小的子数组

2021-05-13  本文已影响0人  程一刀

题目地址: https://leetcode-cn.com/problems/minimum-size-subarray-sum/

题目描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。

参考代码:

class Solution1 {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int i = 0;
        int j = 0;
        int sum = 0;
        int result = INT32_MAX;
        
        for (; j<nums.size(); j++) {
            sum = sum + nums[j];
            if (sum >= s) {
//                int lenth = j-i+1;
//                result = result > lenth? lenth:result;
                while (sum>=s) {
                    if (result > (j- i+1)) {
                        result = j - i +1;
                    }
                    sum = sum -nums[i++];
                }
            }
        }
        if (result == INT32_MAX) {
            result = 0;
        }
        return result;
    }
};

int main(int argc, const char * argv[]) {
    // insert code here...
    
    
    vector<int> data = {2,3,1,2,4,3};
    Solution1().minSubArrayLen(7, data);
    
    
    return 0;
}

参考链接: https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.md

上一篇下一篇

猜你喜欢

热点阅读