[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 where prices[i] is the price of a given stock on the i^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 问题了,不管怎么说都推荐刷一下以及理解一下这套题的核心思路。

这道题比较简单,题目规定是:

  1. 只可以买卖一次股票
  2. 需要获得最大利润

做法为使用一个变量去保存最小值和最大利润,每次便遍历时候保存 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,currmin) 即可。

[6, 2, 7, 1, 3, 5] 为例:

  1. min = 6, maxProfit = 0

  2. min = 2, maxProfit = 4

  3. min = 2, maxProfit = 5

  4. min = 1, maxProfit = 5

    注意,虽然这里 min 变成了 1,不过最大利润是由 7 − 2 7 - 2 72 形成的,后面也不会产生比这个还要大的利润。

  5. min = 1, maxProfit = 5

  6. 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的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--121 买卖股票的最佳时机

刷题38——买卖股票的最佳时机(力扣)

java刷题122-买卖股票的最佳时机II

Leetcode刷题Python309. 最佳买卖股票时机含冷冻期

Leecode刷题之旅-C语言/python-121买卖股票的最佳时机

2021/5/17 刷题笔记买卖股票的最佳时机与动态规划