121. Best Time to Buy and Sell Stock买卖股票的最佳时机

这篇博客介绍了如何使用C语言实现一个算法,计算给定股票价格数组中能获得的最大利润。通过遍历数组,找到最低价格作为买入点,之后遇到更高的价格则更新最大利润。算法执行效率较高,通过了所有测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

You are given an array prices where prices[i] is the price of a given stock on the ith day.

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

Example 1:示例 1:

Input: prices = [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

Example 2:示例 2:

Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。

Constraints:提示:

1 <= prices.length <= 10^{5}
0 <= prices[i] <= 10^{4}

C语言:

int maxProfit(int* prices, int pricesSize){
    int diff=0;
    int min=prices[0];
    for(int i=1;i<pricesSize;i++)
    {
        if(min>prices[i])
            min=prices[i];
        else
            diff=(prices[i]-min)>diff?prices[i]-min:diff;
    }
    return diff;
}

执行结果:通过

执行用时:120 ms, 在所有 C 提交中击败了43.28%的用户

内存消耗:12.6 MB, 在所有 C 提交中击败了62.32%的用户

通过测试用例:211 / 211

C语言:

int maxProfit(int* prices, int pricesSize){
    int diff=0;
    int min=prices[0];
    for(int i=1;i<pricesSize;i++)
    {
        if(min>prices[i])
            min=prices[i];
        if(prices[i]-min>diff)
            diff=prices[i]-min;
    }
    return diff;
}

执行结果:通过

执行用时:124 ms, 在所有 C 提交中击败了32.14%的用户

内存消耗:12.5 MB, 在所有 C 提交中击败了89.69%的用户

通过测试用例:211 / 211

C语言:

int maxProfit(int* prices, int pricesSize){
    int diff=0;
    int min=prices[0];
    for(int i=1;i<pricesSize;i++)
    {
        if(min>prices[i])
            min=prices[i];
        else
            diff=(prices[i]-min)>diff?prices[i]-min:diff;
    }
    return diff;
}

执行结果:通过

执行用时:120 ms, 在所有 C 提交中击败了43.28%的用户

内存消耗:12.6 MB, 在所有 C 提交中击败了62.32%的用户

通过测试用例:211 / 211

C语言:

int maxProfit(int* prices, int pricesSize){
    int max=0;
    int sum=0;
    for(int i=1;i<pricesSize;i++)
    {
        sum+=prices[i]-prices[i-1];
        if(sum>max)
            max=sum;
        if(sum<0)
            sum=0;
    }
    return max;
}

执行结果:通过

执行用时:116 ms, 在所有 C 提交中击败了61.56%的用户

内存消耗:12.8 MB, 在所有 C 提交中击败了15.39%的用户

通过测试用例:211 / 211

7        1        5        3        6        4

   -6        4        -2        3        -2

4+(-2)+3=5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值