zoukankan      html  css  js  c++  java
  • LeetCode 209. Minimum Size Subarray Sum(DP)

    题目

    题意:求一个数组里最短的连续子序列的和大于等于s的长度

    题解:可以用动态规划,我就是用动态规划过的,但是确实不是最简单的解法,看了题解最简单的是双指针,

    双指针

    class Solution {
    public:
        int minSubArrayLen(int s, vector<int>& nums) {
            
            int sum=0;
            
            int left=0;
            
            int ans=INT_MAX;
            for(int i=0;i<nums.size();i++)
            {
                sum+=nums[i];
                while(sum>=s)
                {
                    ans=min(ans,i-left+1);
                    sum-=nums[left];
                    left++;
                }
            }
            
            return ans==INT_MAX?0:ans;
            
        }
    };
    

    DP

    class Solution {
    public:
        int dp[100005];
        int dp2[100005];
        int minSubArrayLen(int s, vector<int>& nums) {
            
            int ans=INT_MAX;
            if(nums.size()==0)
                return 0;
            
            dp[0]=0;
            dp2[0]=nums[0];
            for(int i=1;i<nums.size();i++)
            {
                if(nums[i]+dp2[i-1]>=s)
                {
                    int j=0;
                    int sum=0;
                    for(j=dp[i-1];j<=i-1;j++)
                    {
                        sum+=nums[j];
                        if(nums[i]+dp2[i-1]-sum<s)
                        {
                            break;
                        }
                    }
                    
                    dp[i] = j;
                    dp2[i] = dp2[i-1] + nums[i] - sum + nums[j];
                }
                else
                {
                    dp[i]=dp[i-1];
                    dp2[i]=dp2[i-1]+nums[i];
                }
                
                if(dp2[i]>=s)
                    ans=min(ans,i-dp[i]+1);
            }
            
            
            return ans==INT_MAX?0:ans;
            
        }
    };
    

    二者效率都是差不多的。

  • 相关阅读:
    MySQL视图
    MySQL触发器
    SQL语法详解
    MySQL函数和操作符
    MySQL常用查询
    MySQL数据类型
    MySQL操作详解
    MySQL学习-SQL约束
    MySQL 其它基本操作
    MySQL创建数据库并插入数据
  • 原文地址:https://www.cnblogs.com/dacc123/p/12306370.html
Copyright © 2011-2022 走看看