列表

详情


121. 买卖股票的最佳时机

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

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

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

 

示例 1:

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

示例 2:

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

 

提示:

相似题目

最大子数组和

买卖股票的最佳时机 II

买卖股票的最佳时机 III

买卖股票的最佳时机 IV

最佳买卖股票时机含冷冻期

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int maxProfit(vector<int>& prices) { } };

rust 解法, 执行用时: 12 ms, 内存消耗: 2.8 MB, 提交时间: 2023-10-01 08:01:54

impl Solution {
    pub fn max_profit(prices: Vec<i32>) -> i32 {
        let (mut buy, mut sell) = (-prices[0], 0);
        prices.iter().skip(1).for_each(|&v| {
            buy = buy.max(-v);
            sell = sell.max(v + buy);
        });
        sell
    }
}

rust 解法, 执行用时: 12 ms, 内存消耗: 3 MB, 提交时间: 2023-10-01 08:01:36

impl Solution {
    pub fn max_profit(prices: Vec<i32>) -> i32 {
        let mut ans = 0;
        let mut min = prices[0];
        prices.iter().skip(1).for_each(|&v| {
            min = min.min(v);
            ans = ans.max(v - min);
        });
        ans
    }
}

php 解法, 执行用时: 316 ms, 内存消耗: 31.2 MB, 提交时间: 2023-10-01 08:00:59

class Solution {

    /**
     * @param Integer[] $prices
     * @return Integer
     */
    function maxProfit($prices) {
        $ans = 0;
        $a = max($prices);
        for ($i=0; $i<count($prices,0); $i++){
            $a = min($a,$prices[$i]);
            $ans = max($ans,$prices[$i]-$a);
        }
        return $ans;
    }
}

cpp 解法, 执行用时: 108 ms, 内存消耗: 91.4 MB, 提交时间: 2023-09-21 14:24:23

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        if ( n < 2 ) return 0;
        int imin = prices[0], imax = 0;
        for ( int i = 1; i < n; i++ ) {
            imax = max(imax, prices[i]-imin);
            imin = min(imin, prices[i]);
        }
        return imax;
    }
};

java 解法, 执行用时: 4 ms, 内存消耗: 57.4 MB, 提交时间: 2023-09-21 14:23:49

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        if ( n < 2 ) return 0;
        int imin = prices[0], imax = 0;
        for ( int i = 1; i < n; i++ ) {
            imax = Math.max(imax, prices[i]-imin);
            imin = Math.min(imin, prices[i]);
        }
        return imax;
    }
}

python3 解法, 执行用时: 260 ms, 内存消耗: 23.3 MB, 提交时间: 2022-07-11 10:28:43

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        if n < 2: return 0
        imin, imax = prices[0], 0
        for i in range(1, n):
            imax = max(imax, prices[i]-imin)
            imin = min(imin, prices[i])
        return imax

golang 解法, 执行用时: 140 ms, 内存消耗: 8.1 MB, 提交时间: 2021-07-22 10:16:08

func maxProfit(prices []int) int {
    n := len(prices)
    if n < 2 {
        return 0
    }
    imin, imax := prices[0], 0
    for i := 1; i < n; i++ {
        imax = max(imax, prices[i]-imin)
        imin = min(imin, prices[i])
    }
    return imax
}

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

func min(x, y int) int {
	if x > y {
		return y
	}
	return x
}

上一题