1 题目

/**
 * 你现在是一个买卖青蛙的 huster。
 * 每天的青蛙价格不一样,prices[i]代表青蛙在第 i 天的价 格
 * 求只做一次交易(买入 1 只,卖出 1 只)能得到的最大收益(你必须先买了青蛙之后才能 卖青蛙)。 
 * 时间复杂度要求:O(n) 
 */

2 题解

2.1 解题思路

考查的是买卖的最佳时机,必须先买之后才能卖出。

从最佳利益的角度出发,只需要找到一个买入最低点和卖出最高点的差价即可。

主要变量是当前最小值minPrice以及当前最大利益maxProfit。遍历price数组,更新两个变量的值,即可找到最终的maxProfit。

(可以和股票的最佳买卖时机作对比)

2.2 过程演示

2.3.1 demo1

2.2.2 demo2



2.3 结果展示

2.4 结果分析

时间复杂度:O(n),空间复杂度:O(1)

2.5 代码

int getMaxProfit(int price[],int len){
    int min = price[0];
    int profit = 0;
    for (int i = 1; i < len; ++i) {
        if(price[i] - min > profit) profit = price[i] - min;
        if(price[i] < min) min = price[i];
    }
    return profit;
}