zoukankan      html  css  js  c++  java
  • 53最大子序和

    题目(连续的,区别于不连续的子序列)

    https://leetcode-cn.com/problems/maximum-subarray/

    动态规划

    动态规划1(空间复杂度高)

    使用二维数组

      1 2 3
    1 1 3 6
    2 0 2 5
    3 0 0 3

    1.  初始化对角线

    2.  计算距离为2的和

    3.  计算距离为3的和

    。。。

    计算出右上角的值

    程序:

        public int maxSubArray(int[] nums) {
            if(nums.length == 0){
                return 0;
            }
            int len = nums.length;
            int[][] dp = new int[len][len];
            int max = Integer.MIN_VALUE;
            for(int i = 0 ;i < len ; i ++){
                dp[i][i] = nums[i];
                max = max > nums[i] ? max : nums[i];
            }
    
            for(int i = 1 ; i < len ; i++){
                for(int j = 0 ; i + j < len ; j ++){
                    dp[j][i+j] = nums[j] + nums[i+j] + dp[j + 1][i + j -1];
                    max = max > dp[j][i+j] ? max : dp[j][i+j];
                }
            }
            return max;
        }

    动态规划2(最佳解决)

    dp[i] = max( dp[i - 1] + nums[i] , nums[i])

     public int maxSubArray(int[] nums) {
            if(nums == null && nums.length == 0){
                return 0;
            }
            int[] dp = new int[nums.length];
            dp[0] = nums[0];
            int max = dp[0];
    
            for(int i = 1 ; i < nums.length ; i ++){
                int temp = nums[i] + dp[i-1];
                if (temp > nums[i]){
                    dp[i] = temp;
                }else{
                    dp[i] = nums[i];
                }
                max = Math.max(dp[i],max);
            }
            return max;
        }
  • 相关阅读:
    DAY 118 ES组合查询
    DAY 117 ES查询
    DAY 116 ES文档操作
    box_sizing
    添加视频
    网页自动刷新
    如何使网页宽度自动适应手机屏幕的宽度?
    存储过程&触发器
    mysql事务
    mysql常用语句
  • 原文地址:https://www.cnblogs.com/da-peng/p/11799172.html
Copyright © 2011-2022 走看看