• 53. Maximum Subarray


    一、题目

      1、审题

      2、分析:

        给出一个整形数组(可能全是负数),求连续的子数组的最大的和。

    二、解答

      1、思路:

        方法一、动态规划

          令 maxNum 代表最大和,tmpMaxNum 代表临时最大和。

          当向后扫描时,对第 j 个元素有两种选择,要么放入前面的子数组,要么作为新数组的第一个元素;

          如果 tmpMaxNum > 0, 则令 tmpMaxNum 加上 a[j]; 如果 tmpMaxNum < 0,则 tmpMaxNum = a[j];

          每次扫描,比较 maxNum 与 tmpMaxNum 值, 若 tmpMaxNum > maxNum , 则 maxNum = tmpMaxNum。

    public int maxSubArray(int[] nums) {
         
             int maxNum = nums[0];
             int tmpMaxNum = nums[0];
             
             for (int i = 1; i < nums.length; i++) {
                if(tmpMaxNum > 0) 
                    tmpMaxNum += nums[i];
                else
                    tmpMaxNum = nums[i];
                
                if(tmpMaxNum > maxNum)
                    maxNum = tmpMaxNum;
            }
             
             return maxNum;
        }

      方法二、也是动态规划的思想,将问题化小,用 dp[i] 表示到下标 i 为止的最大和。故有: dp[i] = nums[i] + (dp[i - 1] > 0 ? dp[i -1] : 0);

    public int maxSubArray2(int[] nums) {
            
            int n = nums.length;
            int[] dp = new int[n];
            dp[0] = nums[0];
            int max = dp[0];
            
            for (int i = 1; i < n; i++) {
                dp[i] = nums[i] + (dp[i - 1] > 0 ? dp[i -1] : 0);
                max = Math.max(max, dp[i]);
            }
            
            return max;
        }
  • 相关阅读:
    迷宫城堡 HDU
    Strategic game POJ
    Warm up HDU
    Network POJ
    Delphi Tstream 流
    Delphi 获得文件大小的五种方法
    Delphi Messagebox 介绍
    delphi idftp
    Delphi 操作Excel
    Delphi 打印对象 Tprinter 常用属性、方法、函数、打印示例
  • 原文地址:https://www.cnblogs.com/skillking/p/9650900.html
Copyright © 2020-2023  润新知