「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
LeetCode121.买卖股票的最佳时机
题目内容
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。
设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获
取任何利润,返回 0 。
示例
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大
利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你
不能在买入前卖出股票。
思路(双指针)
1.声明一个快慢指针,在快指针小于数组长度的情况下循环
let slow = 0;
let fast = 1;
let ears = 0;
while (fast < prices.length) {}
2.如果fast的值大于slow的值,就把fast的值赋值给slow值
Ps:slow实际表示最小值
while (fast < prices.length) {
if (prices[fast] < prices[slow]) {
slow = fast;
}
}
3.如果fast的值大于slow的值,求一下他们之间的差是多少,声明一个变量ears = 0;如果这个差大于上一次的差就赋值给ears,然后fast自增(也可以把他们的差值保存到一个数组里面,直接最后return一个数组的最大值);
while (fast < prices.length) {
if (prices[fast] < prices[slow]) {
slow = fast;
} else {
if (ears < (prices[fast] - prices[slow])) {
ears = prices[fast] - prices[slow];
}
fast++
}
}
4.最后return一下ears就可以得到最终的结果
完整代码1
var maxProfit = function(prices) {
let slow = 0;
let fast = 1;
let ears = 0;
while (fast < prices.length) {
if (prices[fast] < prices[slow]) {
slow = fast;
} else {
if (ears < (prices[fast] - prices[slow])) {
ears = prices[fast] - prices[slow];
}
fast++
}
}
return ears;
};
完整代码2
var maxProfit = function(prices) {
let slow = 0;
let fast = 1;
let arr = [];
while (fast < prices.length) {
if (prices[fast] < prices[slow]) {
slow = fast;
} else {
arr.push(prices[fast] - prices[slow]);
fast++
}
}
return arr.length ? Math.max.apply(null,arr) : 0;
};