zoukankan      html  css  js  c++  java
  • 剑指 Offer 63. 股票的最大利润

     

     思路和之前做过的动态规划有点像,首先看我自己做出来的做法

    定义dp[i]的时候想了一下,开始觉得如果定义dp[i]是前i天能做出的最佳利润,感觉dpi和dpi-1不太好找关系

    于是照猫画虎,定义dpi为第i天卖出能得到的最大利润

    注意这个递推关系,如果dpi-1<0,证明pricei-1是前面数组中最小的值,这样的话dpi=

    prices[i]-prices[i-1]

    后面又因为感觉0这个问题不好处理,所以索性最后再来计算,是负数直接返回0

    注意这道题竟然又给我们来空数组,好久没碰到了,要注意

    于是代码如下:

    class Solution {
        public int maxProfit(int[] prices) {
            if(prices.length<2)//这个特值判断比较操蛋
            {return 0;}
            int length=prices.length;
            int[] dp=new int[length];//从0到length-1,代表第n天卖出的最大利润
            dp[1]=prices[1]-prices[0];
            int currentMax=dp[1];
            for(int i=2;i<length;i++)
            {
                dp[i]=Math.max(dp[i-1]+prices[i]-prices[i-1],prices[i]-prices[i-1]);//这里可以直接判断dpi-1是否大于0
                currentMax=Math.max(currentMax,dp[i]);
            }
            return Math.max(0,currentMax);
        }
    }

    看了他们的算法感觉也差不多,感觉我这个思路更清晰点

  • 相关阅读:
    html table标签 用法
    Python 爬取网页HTML代码
    git push -u origin master报错
    sed -n “3p” filename #输出文件的第3行
    puppet原理及配置
    linux开机启动详细流程
    SHELL日志分析 实例一
    真·blog
    一个傻傻的式子
    LeetCode---2. 两数相加
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14442348.html
Copyright © 2011-2022 走看看