test002

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值