博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode刷题122 买卖股票的最佳时机 Best Time to Buy and Sell Stock II(简单) Python Java
阅读量:4129 次
发布时间:2019-05-25

本文共 1995 字,大约阅读时间需要 6 分钟。

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [7,1,5,3,6,4]

输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

示例 2:

输入: [1,2,3,4,5]

输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入: [7,6,4,3,1]

输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

class Solution(object):    def maxProfit(self, prices):        """        :type prices: List[int]        :rtype: int        """        i = 0        profit = 0        while i < len(prices)-1:            if prices[i+1] > prices[i]:                profit += prices[i+1] - prices[i]            i += 1        return profit

 

以下是Java版本:

这道跟之前那道很类似,但都比较容易解答。这道题由于可以无限次买入和卖出。我们都知道炒股想挣钱当然是低价买入高价抛出,那么这里我们只需要从第二天开始,如果当前价格比之前价格高,则把差值加入利润中,因为我们可以昨天买入,今日卖出,若明日价更高的话,还可以今日买入,明日再抛出。以此类推,遍历完整个数组后即可求得最大利润。代码如下:

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

另一种解法:

public static int maxProfit(int[] prices) {          int len = prices.length;          if(len <= 1)              return 0;                    int i = 0;          int total = 0;          while(i < len - 1){              int buy,sell;             //寻找递减区间的最后一个值(局部最小点)             while(i+1 < len && prices[i+1] < prices[i])                 i++;             //局部最小点作为买入点             buy = i;                          //找下一个点(卖出点至少为下一个点)             i++;             //不满足。。继续往下找递增区间的最后一个值(局部最高点)             while(i
= prices[i-1]) i++; //设置卖出点 sell = i-1; //计算总和 total += prices[sell] - prices[buy]; } return total; }

 

转载地址:http://isuvi.baihongyu.com/

你可能感兴趣的文章
Android自动关机代码
查看>>
Android中启动其他Activity并返回结果
查看>>
2009年33所高校被暂停或被限制招生
查看>>
GlassFish 部署及应用入门
查看>>
iWatch报错: Authorization request cancled
查看>>
iWatch报错: Authorizationsession time out
查看>>
如何运行从网上下载的iWatch项目详细步骤.
查看>>
X-code7 beta error: warning: Is a directory
查看>>
Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
查看>>
X-code beta 开发iWatch项目,运行没有错误,但是某些操作一点就崩,而且找不错误的原因场景一
查看>>
Xcode 报错: Extra argument in call
查看>>
iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
查看>>
#import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found
查看>>
`MQTTClient (~> 0.2.6)` required by `Podfile`
查看>>
X-Code 报错 ld: library not found for -lAFNetworking
查看>>
Bitcode
查看>>
If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
查看>>
3.5 YOLO9000: Better,Faster,Stronger(YOLO9000:更好,更快,更强)
查看>>
iOS菜鸟学习--如何避免两个按钮同时响应
查看>>
How to access the keys in dictionary in object-c
查看>>