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

    一、题目

      1、审题

      2、分析

        给出一个股票的每日价格的数组,可以多次交易,求最大利润是多大。

     二、解答

      1、思路: 

        方法一、

          求最大利润,从后往前看,若以现在的价格卖出,前一天的价格买入的话,即可完成这次交易,并获得利润。最终统计所有的利润即可。

        public int maxProfit11(int[] prices) {
            int total = 0;
            for (int i = 1; i < prices.length; i++) {
                if(prices[i] > prices[i-1])
                    total += prices[i] - prices[i-1]; 
            }
            return total;
        }

        方法二、

          ①、先查找从当前位置开始的最小值 min,直到后一个数比 min 大则,记录此最小数 min。

          ②、从 min 后查从当前开始的最大数 max,直到碰到比前一个数小的,则记录此最大值 max。

          ③、max - min 即为一次获利交易,继续向后查找。

      public int maxProfit(int[] prices) {
            int profit = 0, i = 0;
            int len = prices.length;
            while(i < len) {
                while(i < len -1 && prices[i + 1] <= prices[i])
                    i++;
                int min = prices[i++];
                while(i < len -1 && prices[i + 1] >= prices[i])
                    i++;
                
                profit += i < len ? prices[i++] - min : 0;
            }
            return profit;
        }
  • 相关阅读:
    CLR
    Cocos2dx 3.12 在AndroidStudio上编译配置
    MFC 调试方法
    列表初始化
    类型转换
    Cocos2d-x 3.4在AndroidStudio上编译配置
    出发 Let's Go
    LumiSoft.Net邮件接收乱码问题解决
    百度地图经纬度转换JS版
    百度经纬度和google经纬度互转
  • 原文地址:https://www.cnblogs.com/skillking/p/9749684.html
Copyright © 2011-2022 走看看