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。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104
原站题解
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 }