zoukankan      html  css  js  c++  java
  • 121. Best Time to Buy and Sell Stock

    一、题目

      1、审题

      2、分析

        给出一个数组,让你先已 val1 买入,再 以 val2 卖出,求获得的利润最大是多少。

     二、解答

      1、思路: 

        方法一、

          用遍历 min 记录到当前位置的最小值;

          max 记录到当前数组值的价格卖出为止时获得的最大利润。

        public int maxProfit(int[] prices) {
            if(prices.length < 2)
                return 0;
            int min = prices[0];
            int max = 0;
            for (int i = 1; i < prices.length; i++) {
                if(prices[i] - min > 0 && prices[i] - min > max) {
                    max = prices[i] - min; 
                }
                else if(prices[i] < min)
                    min = prices[i];
            }
            return max;
        }

      

      优化:

        变量 minPrice 直接记录当前的最小价值。

        public int maxProfit3(int[] prices) {
            
            int minprice = Integer.MAX_VALUE, max = 0;
            for (int i = 1; i < prices.length; i++) {
                minprice = Math.min(minprice, prices[i]);
                max = Math.max(max, prices[i] - minprice);
            }
            return max;
        }

      方法二、

        采用 “Kadane's Algorithm.”,即采用求连续子串最大和的思想。

        curMax: 以当前价格卖出时获得的利润(若不赚钱就不卖出)。

          ①、若 curMax = 0, 即代表当前值比前边的值都小;

          ②、若 curMax > 0,即, curMax = (price[i-1] - price[i - 2] + price[i] - price[i-1]) = price[i] - price[i-1]。即为 当前价格为最大值,且减去的是前边的最小值。

        max: 总的过程中的最大利润。

        public int maxProfit2(int[] prices) {
            
            int curMax = 0, max = 0;
            for (int i = 1; i < prices.length; i++) {
                curMax = Math.max(0, curMax += prices[i] - prices[i-1]);
                max = Math.max(curMax, max);
            }
            return max;
        }
  • 相关阅读:
    系统开机自动运行程序和自动启动服务
    Show/hide mouse cursor
    Trap mouse events outside of my application
    Delphi防止同时出现多个应用程序实例CreateMutex
    用Delphi实现抓屏
    .NET四种注释规范
    再谈C#里4个访问权限修饰符
    什么是组件以及为什么使用组件
    做项目的时候千万不能懒!
    范式篇之一范式理论
  • 原文地址:https://www.cnblogs.com/skillking/p/9748895.html
Copyright © 2011-2022 走看看