zoukankan      html  css  js  c++  java
  • LeetCode——Best Time to Buy and Sell Stock II (股票买卖时机问题2)

    问题:

    Say you have an array for which the ith element is the price of a given stock on day i.

    Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

    这道题是Best Time to Buy and Sell Stock I问题的第二个版本,题目整体的要求没有变,和I一样,只是在这里不再只限一次交易,此题中可以多次交易,只是买之前必须先卖出去,且初始手里没有股票。

    分析:

    在这道题中由于买卖的次数是不做限制的,而且是不买卖股票是不收手续费的,所以只要第二天的价格比第一天低我们就可以买,比如:

    数组是[7,8,9,1,2,3,2,1]

    在这个数组中我们可以7买入,9卖出,再1买入,3卖出,这就是我们能找到的最大收益了。

    但是这和我提到的第二天比第一天低我们就买有什么关系呢?

    7买9卖,我们可以这么看,

    第一天,价格为7,第二天价格8>7,所以我们7买入,花了7;

    第二天,价格为8,首先把第一天买的买了,然后再看9>8,然后又8买入,没赚;

    第三天,价格为9,把第二天8买的买了,然后再看1<9,不买了,赚了2;

    以此类推。。。

    所以这道题说白了就是然你找到递增的子数列,然后所有递增子数列最大-最小的和就是最大收益。

    代码如下(java):

    public class Solution {
        public int maxProfit(int[] prices) {
            if(prices == null || prices.length == 0)return 0;
            int profit = 0;
            for(int i=1; i<prices.length;i++){
               if(prices[i]>prices[i-1]){
                   profit += prices[i]-prices[i-1];
               }
            }
            
            return profit;
        }
    }
  • 相关阅读:
    Count Up Down(上下计数)
    TCP与UDP的区别
    xml和json的区别
    java中String,StringBuffer,StringBuilder的区别
    java中访问修饰符public,private,protected,friendly的作用域
    java中的数据类型,基本数据类型及其包装类型
    Collection和Collections的区别
    Java中静态变量和实例变量的区别
    Java中实现多态的条件是什么
    Java中抽象类和接口的区别
  • 原文地址:https://www.cnblogs.com/chrischennx/p/4014512.html
Copyright © 2011-2022 走看看