1、Algorithm 一道算法题
这是一道股票题,股票的买入和卖出问题都可以考虑用动态规划。 每一天的选择都只有2种:持有或者不持有。 而基于前一天是持有还是不持有,今天其实有4种情况:
- 昨天持有,今天也持有,那今天的最大利润是昨天持有的最大利润,即 buy
- 昨天不持有,今天持有,那今天的最大利润是今天买入的花费,即 - prices[i]
- 昨天持有,今天不持有,那今天的最大利润是昨天持有+今天不持有(即卖出行为)的和,即 buy + prices[i]
- 昨天不持有,今天不持有,那今天的最大利润是昨天不持有,即 notBuy
由于最终需要让手里保持不持有,才能计算利润,因此返回最后一天不持有的最大利润即可
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
/** 动态规划 */
let buy = -prices[0];
let notBuy = 0;
for(let i=1;i<prices.length;i++){
// 计算第 i 天持有股票的最大利润
const newBuy = Math.max(buy,-prices[i])
// 计算第 i 天不持有股票的最大利润
const newNotBuy = Math.max(buy+prices[i],notBuy);
buy = newBuy;
notBuy = newNotBuy;
}
// 返回的是最后一天不持有的情况
return notBuy;
};
2、Review 读一篇英文文章
Chrome Extension Develop Guide
学习如何开发一个 Chrome 浏览器的扩展程序。
一个扩展程序首先是需要定义在工具栏的显示图标和点击图标后加载的HTML。
同时我们可以通过加载扩展程序,在本地进行程序的调试。
3、Technique/Tips 分享一个小技术
JS种的语句分成以下类型,
JavaScript 语句执行的完成状态,我们用一个标准类型来表示:Completion Record(Completion Record 用于描述异常、跳出等语句执行过程)。Completion Record 表示一个语句执行完之后的结果,它有三个字段:
[[type]] 表示完成的类型,有 break continue return throw 和 normal 几种类型;
[[value]] 表示语句的返回值,如果语句没有,则是 empty;
[[target]] 表示语句的目标,通常是一个 JavaScript 标签。 以下是一些关键字遇到另一些关键字时的情况。
4、Share 分享一个观点
趋势一:新的样式解决方案和组件库将持续涌现
趋势二:利用 AI 来增强开发流程
趋势三:SSR 和 SSG 两种框架之间的竞争将会愈演愈烈
趋势四:前端、后端和全栈开发之间的界限将越来越模糊
趋势六:VS Code 将继续占据最受欢迎 IDE 的宝座
趋势七:将会有更多人使用 TypeScript