[JavaScript 刷题] DP - 买卖股票的最佳时机,leetcode 121
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] DP - 买卖股票的最佳时机,leetcode 121相关的知识,希望对你有一定的参考价值。
[javascript 刷题] DP - 买卖股票的最佳时机,leetcode 121
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目地址:121. Best Time to Buy and Sell Stock
题目
如下:
You are given an array
prices
whereprices[i]
is the price of a given stock on thei^th
day.You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.
Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return
0
.
解题思路
Best Time to Buy and Sell Stock 整个系列应该算都是比较高频和经典的 DP 问题了,不管怎么说都推荐刷一下以及理解一下这套题的核心思路。
这道题比较简单,题目规定是:
- 只可以买卖一次股票
- 需要获得最大利润
做法为使用一个变量去保存最小值和最大利润,每次便遍历时候保存 m i n ( c u r r , m i n ) min(curr, min) min(curr,min),随后更新最大利润 m a x ( m a x , c u r r − m i n ) max(max, curr - min) max(max,curr−min) 即可。
以 [6, 2, 7, 1, 3, 5]
为例:
-
min = 6
,maxProfit = 0
-
min = 2
,maxProfit = 4
-
min = 2
,maxProfit = 5
-
min = 1
,maxProfit = 5
注意,虽然这里 min 变成了 1,不过最大利润是由 7 − 2 7 - 2 7−2 形成的,后面也不会产生比这个还要大的利润。
-
min = 1
,maxProfit = 5
-
min = 1
,maxProfit = 5
保存 min
主要是为了方便计算后面的差值以便更新最大利润。
使用 JavaScript 解题
/**
* @param string s
* @return number
*/
var firstUniqChar = function (s)
const map = new Map();
for (let i = 0; i < s.length; i++)
const ch = s[i];
if (map.has(ch))
map.get(ch)[0]++;
else
map.set(ch, [1, i]);
for (const [char, freq] of map)
if (freq[0] === 1) return freq[1];
return -1;
;
以上是关于[JavaScript 刷题] DP - 买卖股票的最佳时机,leetcode 121的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题Python309. 最佳买卖股票时机含冷冻期