这是我参与更文挑战的第27天,活动详情查看: 更文挑战
题目描述
买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。
设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
leetcode-cn.com/problems/be…
示例 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. 贪心算法
直接上讲解。
这道题其实很简单,想通一个逻辑就行。
开始遍历,我们保存价格最低的,
然后比较每天的最低价差值,如果差值更大,我们就保存更大的,直到最后 保存的都是利润最高的
来人上代码!!!!!
function maxProfit(prices: number[]): number {
let min = prices[0];
let max = 0;
for(let i of prices) {
const priceCount: number = Number(i)
if(!priceCount) continue;
const price = prices[i]
if(price - min > max) max = price - min
if (price < min) min = price
}
return max
};
另外记一个厉害老哥的写法,学习学习。
var maxProfit = function(prices) {
/*
思路四 极简版 一行代码 巧用reduce + [min, max] 本质上是思路三的一种简写方法
虽然 只有一行代码 但是 可读性 与 推展性 不高 生产环境的话还是推荐 思路三
prices.reduce((p, v) => [
Math.min(p[0], v), // 更新最小值
Math.max(p[1], v - p[0] ) // 更新最大值
], [Number.MAX_SAFE_INTEGER, 0])[1]
*/
return prices.reduce((p, v) => [Math.min(p[0], v), Math.max(p[1], v - p[0]) ], [Number.MAX_SAFE_INTEGER, 0])[1]
}
最后
从今天开始不鸽,每天一道算法题并发布文章,首先想要解决的题组为Top100
,第十五道题目打完收工!!