zoukankan      html  css  js  c++  java
  • leetcode中有关 最大的子序和问题

    思路:实际上是一个动态规划问题。设sum[i]为以第i个元素结尾且和最大的连续子数组。假设对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且和最大的连续子数组实际上,要么是以第i-1个元素结尾且和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i]= max(sum[i-1] + a[i], a[i])。可以通过判断sum[i-1] + a[i]是否大于a[i]来做选择,而这实际上等价于判断sum[i-1]是否大于0。由于每次运算只需要前一次的结果,因此并不需要像普通的动态规划那样保留之前所有的计算结果,只需要保留上一次的即可,因此算法的时间和空间复杂度都很小

     解法1:

    public int maxSubArray(int[] nums

    {// 动态规划法

    int sum=nums[0];

    int n=nums[0];

    for(int i=1;i<nums.length;i++)

       {

              if(n>0)n+=nums[i];

            else n=nums[i];

         if(sum<n) sum=n;

    }

    return sum;

    }

    解法2:如果前一个数与后一个数相加之后的值小于后一个数,则前一个数小于0,摄取前一个值,取当前值为dp数组中的值。

     public int maxSubArray(int[] nums) {
            int[] dp = new int[nums.length];
            dp[0] = nums[0];
            for(int i = 1; i< nums.length; i++)
            {
                dp[i] = Math.max(dp[i -1] + nums[i], nums[i]);
            }
            int k = 0;
            for(int i = 0; i < dp.length; i++)
            {
                if(dp[i] > dp[k]) k = i;
            }
            return dp[k];  
        }

  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/zhangchuan1001/p/10565259.html
Copyright © 2011-2022 走看看