博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
买卖股票的最佳时机 II
阅读量:6921 次
发布时间:2019-06-27

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

给定一个数组,它的第 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 {    public int maxProfit(int[] prices) {        if( prices.length == 0 ) return 0;        int max = 0;        int left = prices[ 0 ];        for( int i = 1; i < prices.length; i++ ){            if( prices[ i ] < prices[ i - 1 ] ){                max += prices[ i -1 ] - left;                left = prices[ i ];            }        }        max += prices[ prices.length -1 ] - left;        return max;    }}复制代码

解题思路: 如果一直单调递增,则先不计算 , 如果当前值比前一个值小 , 则将前一个值减去最左值 加入到结果中 , 同时更新最左值为当前值。最后需要加入最后一个值减去最左值(数组一直递增的情况)

转载于:https://juejin.im/post/5c905f3fe51d45564c74bbd4

你可能感兴趣的文章
Samba-上课内容
查看>>
框架-Tomcat BIO、NIO Connector原理
查看>>
VC开发多语言界面支持的简单方法
查看>>
常用SQL语句实例 10
查看>>
JAVA内存机制
查看>>
办公软件之excel打印时打印区域与纸张不符解决方法
查看>>
Lync 小技巧-21-通过Google浏览器加入微软Lync 2013会议
查看>>
SFB 项目经验-03-共存迁移-Lync 2013-TO-SFB 2015-完成
查看>>
《企业云桌面实施》-小技巧-2017-10-29
查看>>
nodejs http 跨域返回解决办法
查看>>
C语言练习1_大数据的简单运算
查看>>
Javascript第三记--语法基础
查看>>
ubuntu使用笔记
查看>>
xshell使用密钥登录linux服务器
查看>>
学习Python第一天!(2)
查看>>
理不清的网络基础知识(00)
查看>>
在Oracle 11g中用看Oracle的共享内存段---------IPCS
查看>>
如何提高PUE值 数据中心能耗详解
查看>>
我的友情链接
查看>>
hibernateTemplate类的使用-总结
查看>>