首页 > 其他分享 >力扣刷题Days26-122.买股票最佳时期||(js)

力扣刷题Days26-122.买股票最佳时期||(js)

时间:2024-03-28 15:31:49浏览次数:29  
标签:股票 Days26 js 力扣 prices Array 手里 dp fill

目录

1,题目

2,代码

动态规划

3,回顾与总结

3.1解题思路回顾

(1)定义状态

(2)转移方程

3.2javascript中语法二维数组的创建

3.3动态规划 状态变化的实现


1,题目

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

2,代码

动态规划

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    const n = prices.length;
    if(n === 0){
        return 0;
    }
    const dp = new Array(n).fill(0).map(v=>Array(2).fill(0));
    dp[0][0] = 0;
    dp[0][1] = -prices[0];
    for(let i = 1; i<n ; i++){
        dp[i][0] = Math.max(dp[i-1][1] + prices[i],dp[i-1][0]);
        dp[i][1] = Math.max(dp[i-1][0] - prices[i],dp[i-1][1]);
    }
    return dp[n-1][0];
};

3,回顾与总结

3.1解题思路回顾

(1)定义状态

dp[i][0]表示第i天交易完成后手里没有股票的最大利润;

dp[i][1]表示第i天交易完成后手里持有一支股票的最大利润;

(2)转移方程

dp[i][0]表示这一天手里没有股票,则

前一天手里也是没有股票的,即dp[i-1][0];或者前一天手里持有一只股票,今天要将其出售,即dp[i-1][1]-price[i];

dp[i][1]表示这一天手里持有一支股票,则

前一天手里就持有该股票的,即dp[i-1][1];或者前一天手里没有股票,今天要进行购买,即dp[i-1][0]-price[i];

则有状态转移方程为:

dp[i][0]=max{dp[i−1][0],dp[i−1][1]+prices[i]}

dp[i][1]=max{dp[i−1][1],dp[i−1][0]−prices[i]}

3.2javascript中语法二维数组的创建

const dp = new Array(n).fill(0).map(v=>Array(2).fill(0));

3.3动态规划 状态变化的实现

for(let i = 1; i<n ; i++){
        dp[i][0] = Math.max(dp[i-1][1] + prices[i],dp[i-1][0]);
        dp[i][1] = Math.max(dp[i-1][0] - prices[i],dp[i-1][1]);
    }

勉励自己:贵在坚持!

标签:股票,Days26,js,力扣,prices,Array,手里,dp,fill
From: https://blog.csdn.net/m0_51666362/article/details/137014440

相关文章

  • 使用fabric.js框选图片区域并生成svg图
    仍然是在图片上特定区域根据数值显示不同的颜色的需求,改进下代码。增加了测量辅助线、对齐辅助线、生成svg图等,基本满足需求。demo中包括了生成json、svg字符串和下载svg图。<scriptsrc="../plugins/fabric.min.js"></script><scriptsrc="../plugins/aligning_guidelines.......
  • 在Vue.js框架中,activated和created的区别
    在Vue.js框架中,activated和created两个钩子函数都是在组件被创建时执行的函数,但它们的使用场景略有不同。createdcreated钩子函数是在组件被创建(即实例化)时执行的,可以用它来初始化组件的数据、监听事件、调用方法等操作。它是组件生命周期中的第一个钩子函数,通常用于组件初......
  • JS中为什么forEach方法不能终止
    forEach是我们在日常工作中经常使用到的方法,但是你有什么尝试使用forEach进行停止或终止等操作呢?一、走进forEach对于forEach了解不多的,只知道它可以遍历数组,如果有这么一个操作:一个数组[0,1,2,3,4,5],打印出[0,1,2,3],可能会这么写。1.1尝试returnconstarr=[0,......
  • js 回调 callback
    <html><head><title>按钮点击事件示例</title><script>functiona(callback){console.log("执行函数a!");console.log("调用回调函数");callback();//调用回调函数}functionb(){console.log("回调函数b"......
  • 路径总和 II(力扣 dfs)
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}*......
  • Day52:WEB攻防-XSS跨站&反射型&存储型&DOM型&标签闭合&输入输出&JS代码解析
    目录XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS:(某案例测试)知识点:1、XSS跨站-输入输出-原理&分类&闭合2、XSS跨站-分类测试-反射&存储&DOMXSS跨站-输入输出-原理&分类&闭合漏洞原理:接受输入数据,输出显......
  • nodejs 核心模块
    nodejs核心模块Node.js的核心模块是Node.js发行版自带的模块,无需通过npm进行安装。你可以在Node.js的官方文档中找到所有核心模块的详细列表。以下是一些常用核心模块的简单使用示例:http 模块:创建一个简单的HTTP服务器。  consthttp=requir......
  • 华为OD机试 - 最多购买宝石数目(Java & JS & Python & C & C++)
    须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输入描述输出描述解题思路:题目描述橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i]0≤i<nn=gems.length宝石可同时......
  • 「DevExpress中文教程」如何将DevExtreme JS HTML编辑器集成到WinForms应用
    在本文中我们将演示一个混合实现:如何将webUI工具集成到WinForms桌面应用程序中。具体来说,我们将把DevExtremeJavaScriptWYSIWYGHTML编辑器(作为DevExtreme UI组件套件的一部分发布的组件)集成到WindowsForms应用程序中。获取DevExtremev23.2正式版下载DevExpress技术交......
  • 力扣由浅至深 每日一题.16 ​ 合并两个有序数组​
    日复一日的生活里也会有新的快乐                 ——24.3.27合并两个有序数组给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2......