Skip to content

Files

0121.Best Time to Buy and Sell Stock

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Mar 13, 2022
Mar 13, 2022
Jul 11, 2021
Jul 11, 2021
Jul 11, 2021
Jul 11, 2021
Dec 24, 2021
Jul 11, 2021
Mar 13, 2022
Mar 13, 2022

English Version

题目描述

给定一个数组 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

解法

参考本站 面试题 63. 股票的最大利润(题意相同)。

Python3

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        res, mi = 0, prices[0]
        for price in prices[1:]:
            res = max(res, price - mi)
            mi = min(mi, price)
        return res

Java

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

C++

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

Go

func maxProfit(prices []int) int {
	res, mi := 0, prices[0]
	for i := 1; i < len(prices); i++ {
		res = max(res, prices[i]-mi)
		mi = min(min, prices[i])
	}
	return res
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

JavaScript

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function (prices) {
    let res = 0;
    let mi = prices[0];
    for (let i = 1; i < prices.length; ++i) {
        res = Math.max(res, prices[i] - mi);
        mi = Math.min(mi, prices[i]);
    }
    return res;
};

C#

public class Solution {
    public int MaxProfit(int[] prices) {
        int res = 0, mi = prices[0];
        for (int i = 1; i < prices.Length; ++i)
        {
            res = Math.Max(res, prices[i] - mi);
            mi = Math.Min(mi, prices[i]);
        }
        return res;
    }
}

TypeScript

function maxProfit(prices: number[]): number {
    let res = 0;
    let min = Infinity;
    for (const price of prices) {
        res = Math.max(res, price - min);
        min = Math.min(min, price);
    }
    return res;
}

Rust

impl Solution {
    pub fn max_profit(prices: Vec<i32>) -> i32 {
        let mut res = 0;
        let mut min = i32::MAX;
        for price in prices {
            res = res.max(price - min);
            min = min.min(price);
        }
        res
    }
}

...