• 【Leetcode】209. Minimum Size Subarray Sum


    Question:

    Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.

    For example, given the array [2,3,1,2,4,3] and s = 7,
    the subarray [4,3] has the minimal length under the problem constraint.

    Tips:

    给定一个长度为n的正整数数组,以及一个正整数s。找到长度最小的连续子数组,使他们的和大于等于s,并返回子数组的长度。如果不存在这样的子数组,就返回0.

    思路:

    设置两个变量,slow记录子数组的第一个数字位置,fast记录子数组当前要加到sum的数字位置。

    fast从0位置开始向后移动,每次都加入到sum中sum+=nums[fast++];

    当sum>=s时,最终结果ans就取原来的ans与fast-slow+1之间的最小值。在对sum进行减操作,减掉nums[slow],并继续判断sum是否仍然大于等于s。如果扔>=,slow向前移动,继续减nums[slow],

    否则再继续在sum上加nums[fast]。

    代码:

    public int minSubArrayLen(int s, int[] nums) {
            if(nums==null || nums.length<=0) return 0;
            int len=nums.length;
            int ans=Integer.MAX_VALUE;
            int slow=0,fast=0;
            int sum=0;
            while(fast<len){
                sum+=nums[fast++];
                while(sum>=s){
                    //前面sum与nums[fast++]相加,fast也自加了1,所以比较min与fast-slow即可
                    ans=Math.min(fast-slow,ans);
                    sum-=nums[slow++];
                    if(sum==0)return 1;//代表刚减掉的nums[slow]=s
                }
            }
            return ans==Integer.MAX_VALUE?0:ans;
        }
  • 相关阅读:
    React 高阶组件(HOC)
    使用 httpclient 连接 https 请求
    JAVA递归生成树形菜单
    Java8 stream 操作 GroupBy 设置键允许为null
    Java中简单对象(数组)拷贝
    idea中的Java项目引入外部jar包以及打包
    Java代码测试Kafka集群收发消息
    docker环境下,查看服务的线程数
    前端 vue3 随手记
    当GPU型号选定后,用什么样GPU的服务器?
  • 原文地址:https://www.cnblogs.com/yumiaomiao/p/8549726.html
Copyright © 2020-2023  润新知