题目描述:
给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
(1)只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算所能获取的最大利润。
返回可以从这笔交易中获取的最大利润。如果不能获取任何利润,返回 0
;
(2)在每一天,可以决定是否购买和/或出售股票。在任何时候最多只能持有一股股票。也可以先购买,然后在同一天出售。返回能获得的最大利润。
解题思想:
(1)摒弃一开始所想到的在给定的数组中寻找最小元素和最大元素(保证最小元素的下标值在最大元素之前),原因是在特殊情况下,例如最小元素位于最后一位,返回值会是0
,但是在数组中存在第i-1
个元素与第i
个元素的差值为正数(这种情况代表有利润)
因而正确的想法应该是记录最小值,然后同时记录差值最大值而不是最大值。
int maxProfit(int* prices, int pricesSize) { int minPrice,maxProfit; minPrice=prices[0]; maxProfit=0; for(int i=1;i<pricesSize;i++){ minPrice=minPrice>prices[i]?prices[i]:minPrice; maxProfit=maxProfit>prices[i]-minPrice?maxProfit:prices[i]-minPrice; } return maxProfit; }
(2)在理解了单股单出的情况下,单股多出也就好理解了,只要利润为正值就可以抛售,注意计算利润的最大值,需要累加。
int maxProfit(int* prices, int pricesSize) { int profit=0; for(int i=1;i<pricesSize;i++){ profit+=prices[i]-prices[i-1]>0?prices[i]-prices[i-1]:0; } return profit; }
标签:遍历,int,元素,maxProfit,最佳时机,prices,minPrice,最值,利润 From: https://www.cnblogs.com/WangLiy/p/18047383