【JavaScript】LeetCode:96-100

文章目录

  • 96 单词拆分
  • 97 最长递增子序列
  • 98 乘积最大子数组
  • 99 分割等和子集
  • 100 最长有效括号

96 单词拆分

在这里插入图片描述

  • 动态规划
  • 完全背包:背包-字符串s,物品-wordDict中的单词,可使用多次。
  • 问题转换:s能否被wordDict中的单词组成。
  • dp[i]:长度为i的字符串s[0, i]能否被wordDict组成,dp[i] = true / false。
  • 两层for循环遍历顺序:先背包后物品。
  • i为字符串长度,j从0开始,一直遍历到i - 1,若s[j, i]在wordDict中,且s[0, i - j]能被wordDict组成,则s[0, i]能被wordDict组成。
  • 初始化:dp[0] = true,其他为false。
/*** @param {string} s* @param {string[]} wordDict* @return {boolean}*/
var wordBreak = function(s, wordDict) {let dp = Array(s.length + 1).fill(0);dp[0] = 1;for(let i = 1; i <= s.length; i++){for(let j = 0; j < i; j++){if(wordDict.includes(s.slice(j, i)) && dp[j] == 1){dp[i] = 1;}}}return dp[s.length]? true: false;
};

97 最长递增子序列

在这里插入图片描述

  • 动态规划
  • dp[i]:以nums[i]为结尾的最长递增子序列的长度。
  • 第一层for循环遍历每个数字i,第二层for循环遍历从0到i - 1的每个数字j。
  • 若nums[i] > nums[j],则以nums[i]为结尾的最长递增子序列的长度 = max(以nums[j]为结尾的最长递增子序列的长度 + 1, dp[i])。
  • 初始化:因为每个数字的最长递增子序列的长度最小为1,所以dp[i] = 1。
/*** @param {number[]} nums* @return {number}*/
var lengthOfLIS = function(nums) {let dp = Array(nums.length).fill(1);let res = 1;for(let i = 1; i < nums.length; i++){for(let j = 0; j < i; j++){if(nums[i] > nums[j]){dp[i] = Math.max(dp[i], dp[j] + 1);}}res = Math.max(res, dp[i]);}return res;
};

98 乘积最大子数组

在这里插入图片描述

  • 动态规划
  • 由于在数组中有负数,因此这里设置两个dp数组。
  • dp_max[i]:以nums[i]为结尾的子数组的最大乘积,dp_min[i]:以nums[i]为结尾的子数组的最小乘积。
  • dp_max[i] = max(nums[i] * 以nums[i - 1]为结尾的子数组的最大乘积, nums[i] * 以nums[i - 1]为结尾的子数组的最小乘积, nums[i])。
  • dp_min[i] = min(nums[i] * 以nums[i - 1]为结尾的子数组的最大乘积, nums[i] * 以nums[i - 1]为结尾的子数组的最小乘积, nums[i])。
/*** @param {number[]} nums* @return {number}*/
var maxProduct = function(nums) {let dp_max = Array(nums.length).fill(0);let dp_min = Array(nums.length).fill(0);let res = nums[0];dp_max[0] = nums[0], dp_min[0] = nums[0];for(let i = 1; i < nums.length; i++){dp_max[i] = Math.max(Math.max(nums[i] * dp_max[i - 1], nums[i] * dp_min[i - 1]), nums[i]);dp_min[i] = Math.min(Math.min(nums[i] * dp_max[i - 1], nums[i] * dp_min[i - 1]), nums[i]);res = Math.max(res, dp_max[i]);}return res;
};

99 分割等和子集

在这里插入图片描述

  • 动态规划
  • 0 / 1背包
  • dp[j]:容量为j的背包最大价值为dp[j]。
  • target为nums的总和,若使用nums中的物品(数字 = 价值)能把容量为target / 2的背包装满,价值为target / 2,则能够分割等和子集。
  • 根据题意,若target为奇数,则不能够分割等和子集。
  • 第一层for循环遍历物品,第二层for循环遍历背包容量。
  • dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])。
/*** @param {number[]} nums* @return {boolean}*/
var canPartition = function(nums) {let target = nums.reduce((sums, item) => sums + item, 0);if(target % 2 == 1){return false;}else{target = Math.floor(target / 2);}let dp = Array(target + 1).fill(0);for(let i = 0; i < nums.length; i++){for(let j = target; j >= nums[i]; j--){dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);}}return dp[target] == target? true: false;
};

100 最长有效括号

在这里插入图片描述

  • 动态规划
  • dp[i]:以s[i]为结尾的最长有效子串的长度。
  • 初始化:dp[i] = 0。
  • (1) 若s[i] = “(”:dp[i] = 0。
  • (2) 若s[i] = “)”:
    ① s[i - 1] = “(”:例如…( ),s[i - 1]和s[i]为有效括号,因此dp[i] = dp[i - 2] + 2。
    ② s[i - 1] = “)”:例如…( (…) ),此时判断s[i - dp[i - 1] - 1]的括号方向,若为"(",则与s[i]为有效括号,因此dp[i] = dp[i - 1] + 2 + 以s[i - dp[i - 1] - 2]为结尾的有效字串的长度。
  •        … )                       (                         (          …     )           )
  • i - dp[i - 1] - 2      i - dp[i - 1] - 1      i - dp[i - 1]   …   i - 1         i
/*** @param {string} s* @return {number}*/
var longestValidParentheses = function(s) {let dp = Array(s.length).fill(0);let res = 0;for(let i = 1; i < s.length; i++){if(s[i] == "("){dp[i] = 0;}else if(s[i] == ")"){if(s[i - 1] == "("){if(i - 2 >= 0){dp[i] = dp[i - 2] + 2;}else{dp[i] = 2;}}else if(s[i - 1] == ")" && s[i - dp[i - 1] - 1] == "("){if(i - dp[i - 1] - 2 >= 0){dp[i] = dp[i - 1] + dp[i - dp[i - 1] - 2] + 2;              }else{dp[i] = dp[i - 1] + 2;}}}res = Math.max(res, dp[i]);}return res;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/17014.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

maven的optional选项说明以及具体应用

写在前面 本文看下maven的optional选项的作用和用法。 1&#xff1a;什么作用 考虑这样的场景&#xff0c;A依赖B&#xff0c;B依赖C&#xff0c;正常的按照依赖的传递性&#xff0c;A也会间接的依赖C&#xff0c;但是在一些特定的场景中项目A只希望依赖B&#xff0c;而不依…

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…

【强弱分界】,股市动态多维波动 精准辅助工具 源码

该策略结合了多重技术指标&#xff0c;旨在通过高低点的动态波动分析&#xff0c;提供精准的买入、卖出信号及市场强弱判断。 本策略适用于&#xff1a; 中短期股市交易者&#xff0c;帮助判断市场的进出场时机。 高频交易和量化交易系统中的信号生成模块。 在波动较大的市场…

【IEEE出版 | 中国石油大学(华东)主办】第六届信息与计算机前沿术国际学术会议(ICFTIC 2024,12月13-15日)

第六届信息与计算机前沿术国际学术会议(ICFTIC 2024) 2024 6th International Conference on Frontier Technologies of Information and Computer 官方信息 会议官网&#xff1a;WWW.ICFTIC.ORG 2024 6th International Conference on Frontier Technologies of Information…

如何在SM30生成的维护表中增加选择框 CheckBox

用户想要在屏幕中显示选择框进行维护&#xff0c;如下图&#xff1a; 很简单&#xff0c;先通过 SE11 定义一个 CHAR1 类型的字段名&#xff0c;然后通过使用程序转到表维护生成器 进入到概述屏幕&#xff0c;双击&#xff0c;然后进入到屏幕布局&#xff1a; 先删除原来通过系…

极客争锋 智连未来 TuyaOpen Framework极客创意大赛正式开启

TuyaOpen Framework极客创意大赛正式开启 可选择基于: TuyaOpen Framework 原生开源包: https://github.com/tuya/tuyaopen 支持 Ubuntu/T2/T3/T5/ESP32/ESP32C3等多款芯片TuyaOpen Arduino:https://github.com/tuya/arduino-tuyaopen支持 T2/T3/T5等多款芯片TuyaOpen LuaNode…

麒麟kysec安全

一、kysec安全框架管理 开启kysec getstatus Copy security-switch --set default Copy 重启系统 reboot Copy 刷新页面&#xff0c;等待几分钟&#xff0c;即可完成文件的扫描。 查看kysec状态 getstatus Copy 切换到管理员身份&#xff08;密码&#xff1a;devuser…

c++ 左值、右值、左值引用()、右值引用(),移动构造和std::move

左值和右值 不是等于号的左边和右边 &#xff01;&#xff01;&#xff08;一部分场景下是这样&#xff09; 右值可以描述成一个临时值 c 左值、右值、左值引用、右值引用&& 左值右值左值引用右值引用结论 第二弹~ 你可以完全不看上面的解释移动语义移动构造和move 左…

黑马嵌入式开发入门模电基础学习笔记

学习视频: 黑马程序员嵌入式开发入门模电&#xff08;模拟电路&#xff09;基础 文章目录 背景介绍电流电压组件仿真三极管ne555PCBEDA案例&#xff1a;非接触式电笔案例&#xff1a;电子琴 背景介绍 电流 电压 组件 仿真 三极管 mos管 ne555 PCB EDA 案例&#xff1a;非接触…

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

目录 一、问题产生 二、问题分析 三、解决方法(2种) 一、问题产生 在服务器上使用新的Tomcat9(绿色版ZIP),打开一个cmd窗口后,将路径定位到“tomcat\bin\”目录,运行“startup.bat”。程序会自动打开一个新窗口,这个是Java程序的运行窗口,但是里面的中文全是乱码,如…

Neo4j Desktop 和 Neo4j Community Edition 区别

Neo4j Desktop 和 Neo4j Community Edition 的主要区别在于它们的用途、功能以及安装和管理方式。以下是这两者的详细对比&#xff1a; 1. Neo4j Desktop Neo4j Desktop 是一个图形化的桌面应用程序&#xff0c;主要为开发人员和个人使用提供了一个便捷的环境来安装、管理和运…

FebHost:企业注册.UK域名步骤--了解英国商业环境

企业注册.UK域名步骤&#xff1a;了解英国商业环境 对于希望拓展国际业务的公司和企业家来说&#xff0c;在英国开展业务具有众多优势。英国是一个对企业友好的目的地&#xff0c;吸引着初创企业和国际公司&#xff0c;并将自己定位为首屈一指的全球经济强国&#xff0c;在欧洲…

无人机动力系统测试-实测数据与CFD模拟仿真数据关联对比分析

我们经常被问到这样的问题&#xff1a;“我们计划运行 CFD 仿真&#xff0c;我们还需要对电机和螺旋桨进行实验测试吗&#xff1f;我们可能有偏见&#xff0c;但我们的答案始终是肯定的&#xff0c;而且有充分的理由。我们自己执行了大量的 CFD 仿真&#xff0c;但我们承认&…

cantos7.9系统-部署mysql-8.0.35

前言:MySQL是一个流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它基于SQL&#xff08;Structured Query Language&#xff09;进行操作。以下是MySQL的一些基本介绍&#xff1a; 开源&#xff1a;MySQL由瑞典MySQL AB公司开发&#xff0c;后来被Su…

预测AI如何提升销售绩效管理:五大方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

# 第20章 Cortex-M4-触摸屏

第20章 Cortex-M4-触摸屏 20.1 触摸屏概述 20.1.1 常见的触摸屏分类 电阻式触摸屏、电容式触摸屏、红外式触摸屏、表面声波触摸屏 市场上用的最多的是电阻式触摸屏与电容式触摸屏。红外管式触摸屏多用于投影仪配套设备。 电阻式触摸屏构成&#xff1a;整个屏由均匀电阻构成…

Selenium自动化测试

片头 嗨~小伙伴们&#xff0c;今天&#xff0c;我们来开启新的篇章---Selenium自动化测试&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 一、自动化测试 指通过专门的软件工具和脚本来执行测试任务&#xff0c;而不需要人工干预。它可以自动执行各种测试任务&am…

下一代以区域为导向的电子/电气架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

RH850-F1KMS1 DMA数据转移

DMA简介 随着汽车电子系统和工业自动化的需求不断增长&#xff0c;DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;技术在提高数据传输效率方面扮演着重要角色。在本篇文章中&#xff0c;我们将探讨RH850微控制器如何高效实现DMA传输&#xff0c;以…

MOSFET电路栅源极GS之间并联电容后,MOS炸管原因分析

1、前言 在介绍&#xff0c;在进行MOSFET相关的电路设计时&#xff0c;可能会遇到MOSFET误导通的问题&#xff0c;为了解决此问题&#xff0c;我们提出了两种方法&#xff0c;一种是增大MOSFET栅极串联电阻的阻值&#xff0c;另外一种是在MOSFET栅-源极之间并联一个电容&#…