买卖股票的最佳时机——差值的最值的遍历寻找

题目描述:

给定一个数组 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;
}

 

posted @ 2024-03-01 16:23  丢丢八八  阅读(19)  评论(0)    收藏  举报