• 前缀和-长度最小的子数组


    题目链接: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)) 时间复杂度的解法。

    题解:

    class Solution {
    public:
        int minSubArrayLen(int s, vector<int>& nums) {
            
            int ans = nums.size() + 1;
            vector<int> prefix(nums.size() + 1, 0);    //前缀和数组
            prefix[0] = 0;
            for(int i =1; i < prefix.size(); i++)         
            {
                prefix[i] = prefix[i - 1] + nums[i - 1];
            }
            for(int i = 1; i < prefix.size(); i++)
            {
                int target = s + prefix[i - 1];    // prefix[j] - prefix[i] >= s
                int bound = binarySearch(target, prefix);
                if(bound < prefix.size() )
                {
                    ans = min(ans, bound - (i - 1));
                }
            }
            return ans == nums.size() + 1 ? 0: ans;
        }
        int binarySearch(int t, vector<int>& prefix)   //查找>=target的第一个数
        {
            int left = -1;
            int right = prefix.size();
            while(left + 1 != right)
            {
                int mid = (right + left) / 2;
                if(prefix[mid] < t)
                {
                    left = mid;
                }else{
                    right = mid;
                }
    
            }
            
            return right;
        }
    };
    
    
  • 相关阅读:
    jdbc的入门学习
    java代码生成Excel文件3000条自定义属性的的域账户名
    java面试题
    node图片资源捉取
    运用node真机调试移动web项目
    node读取文件转换json文件
    微信小程序页面导航功能
    JavaScript值全等判断
    微信小程序海报生成功能
    JavaScript常用数组操作方法,包含ES6方法
  • 原文地址:https://www.cnblogs.com/ZigHello/p/15366781.html
Copyright © 2020-2023  润新知