zoukankan      html  css  js  c++  java
  • Minimum Size Subarray Sum -- leetcode

    题目描写叙述:

    Given an array of n positive integers and a positive integer s, find the minimal length of a 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.

    意思是讲给定一组整数数组nums和一个数字s。求的nums数组中最短长度的连续数字和,使得该和大于等于s。
    比方上面实例数组 2 。3。1,2,4,3这一个数组中,大于等于7的最短连续为 3 ,4 那么 minimal为2

    解题思路

    定义一个start 。表示序列的事实上点,初始值为0
    定义一个tempresult,用来累积连续序列和,初始值为0
    定义一个minlength,用来表示最短序列。初始值为INT-MAX

    • 一个循环,首先从数组開始处i=0,此时start=0,往后累积和,tempresult+=nums[i]

    • 推断累积和和s的大小,假设大于等于s,则进行例如以下操作

      - 先计算当前minlength=min(minlength,i-satrt+1)
      
      -然后将tempresult的值减去这个序列的nums[start]。起始点start++再次计算minlength(缩短整个序列),然后继续推断该值跟s的大小,直到减去的值使得tempresult的值小于s 
      
    • 假设小于s。则继续累积和。直到满足和大于等于s

    • 注意。还有可能存在不存在序列的,就是整个序列和都相加都小于s。这是就须要推断(程序返回时候i-start==nums.size()&&tempresult小于s

    拿上面的数组列子进行解说nums= 2 ,3,1,2,4。3,s=7

    首先 从2開始加,一直加到 2,3。1。2此时tempresult=8,大于等于7,先求的但当前minlength=4。然后缩短序列 start++,序列为3。1,2。对应的tempresult=6,小于7。则继续往后面累积和,3,1,2,4,然后缩短序列,变成,1,2,4,start++,此时minlength=3。然后继续缩短,2。4小于7,然后往后面继续累加,2,4,3,大于7,缩短,4,3,大于等于7,minlength=2。,到最后了。结束。

    代码例如以下

    class Solution {
    public:
        int minSubArrayLen(int s, vector<int>& nums) {
    
    
                int i,start,minlength,tempresult;
    
        minlength=INT_MAX;
        start=0;
        tempresult=0;
        for(i=start;i<nums.size();i++)
        {
            tempresult+=nums[i];
    
            if(tempresult>=s)
            {
                minlength=min(minlength,i-start+1);
    
                tempresult-=nums[start];
                start++;
                while(tempresult>=s)
                {
    
                    minlength=min(minlength,i-start+1);
                    tempresult-=nums[start];
                    start++;
                }
            }
    
    
        }
        if(i-start==nums.size()&&tempresult<s)
            return 0;
    
        return minlength;
        }
    };
    
  • 相关阅读:
    不干就不需要知道,不需要知道就不想知道,不想知道就永远不知道,猪混几十年还是猪
    Visual Studio 2015编译安装配置QT5.5.1(含QTWEBKIT)
    IT生涯, 我的常用软件清单
    WIN10以后如果Manifest中不写支持WIN10的话,获取版本号的API获取的是6
    大促准备流程
    T4模板合并js
    maven/eclipse搭建ssm(spring+spring mvc+mybatis)
    如何理解分布式和区块链技术
    MaidSafe.net,一个完全去中心的化的云存储系统
    Akka.NET是Java/Scala 流行框架Akka的一个 .NET 开源移植
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5349082.html
Copyright © 2011-2022 走看看