zoukankan      html  css  js  c++  java
  • [leetCode]122.买卖股票的最佳时机II

    一次遍历

    下面是自己写的一次遍历,思路是每次找到波谷min后开始爬坡,如果没有到转折点就将这次利润和上次利润进行比较,如果大于上次利润累加器sum就加上这次利润减去上次利润将利润最大化

    class Solution {
        public int maxProfit(int[] prices) {
            int min = 0;
            int prfit = 0;
            int sum = 0;
            for(int i = 1; i < prices.length; i++){
                if(prices[i] < prices[i-1]) {//更新最小值到达谷底
                    min = i;
                    prfit = 0;
                }else if(prices[i] > prices[min] && prices[i] > prices[i-1]){//在上升时不断更新prift
                    int temp = prfit;//上次利润
                    prfit = prices[i] - prices[min];//当前利润
                    if(prfit > temp){//如果当前利润比上次利润多则加上这次利润,减去上次利润
                         sum = sum + prfit - temp;
                    }
                }
            }
            return sum;
        }
    }
    

    下面是官方的一次遍历,每次爬坡将一小段的利润累加,使得利润最大化

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

    峰谷法

    寻找曲线的每个波谷和波峰,计算之间的利润,将所有波峰波谷之间的利润求和

    class Solution {
        public int maxProfit(int[] prices) {
            int i = 0;
            int valley = prices[0];//波谷
            int peak = prices[0];//波峰
            int maxProfit = 0;
            while(i < prices.length -1){
                //从波峰开始寻找波谷
                while(i < prices.length - 1 && prices[i] >= prices[i+1])
                    ++i;
                valley = prices[i];
                //从波谷开始攀爬寻找波峰
                while( i < prices.length - 1 && prices[i] <= prices[i + 1])
                    ++i;
                peak = prices[i];
                maxProfit += peak - valley;
            }
            return maxProfit;
        }
    }
    
  • 相关阅读:
    kafka学习-卡不卡的简单使用
    mongoDB-mongo compass使用学习-最像关系型数据库的非关系型文档型数据库
    postman使用-跑男常用功能
    jmeter数据驱动csv+批量导出数据到csv文件
    jmeter-数据库查询与调用-mysql
    arch linux mysql using
    Win10安装 oracle11g 出现INS-13001环境不满足最低要求解决方法
    oracle11g数据库安装
    安装PLSQLDeveloper
    oracle基本学习
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860003.html
Copyright © 2011-2022 走看看