1. 题目
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
2. 实例
输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
3. 解答
python3
class Solution: def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ if len(prices) == 0: return 0 min_num = prices[0] max_profit = 0 for idx in range(1, len(prices)): max_profit = max(max_profit, prices[idx]-min_num) if prices[idx] < min_num: min_num = prices[idx] return max_profit
C++
class Solution { public: int maxProfit(vector<int>& prices) { if (prices.empty()) return 0; int min_price = prices[0]; int max_profit = 0; for (int i = 1; i < prices.size(); i++) { if (prices[i] - min_price > max_profit) max_profit = prices[i] - min_price; if (prices[i] < min_price) min_price = prices[i]; } return max_profit; } };
4. 优答:
使用迭代器和algorithm库中的max_element函数来求得vector中的最大值,顺便求出了最大值所在的位置。这里的auto其实在运行的时候就被自动替换为了vector<int>::iterator
类型。
python3
prices = [7,5,1,3,6,4] min_ele = min(prices) # 获取最小元素 min_index = prices.index(min_ele) # 获取最小元素下标