代码随想录算法训练营第四十三天 动态规划 part05● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

  • 1049. 最后一块石头的重量 II

题目链接: . - 力扣(LeetCode)

思路:主要是要找到两个近似相等的子集和,去求这两个和的最小值;

之后就是和从子集中找相对应和的思路是一样的了

注意点:1)dp 初始化;初始为 0; 2)j如果>= 当前物品的容量,是可以装进去的

实现代码:

var lastStoneWeightII = function (stones) {let sum = stones.reduce((accu, curr) => accu + curr, 0)const halfSum = Math.floor(sum / 2)let dp = new Array(halfSum + 1).fill(0)for (let i = 0; i < stones.length; i = i + 1) {for (let j = halfSum; j >= stones[i]; j = j - 1) {dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i])}}return Math.abs(sum - dp[halfSum] - dp[halfSum])};
  • 494. 目标和

题目链接:. - 力扣(LeetCode)

之前背包问题已经处理了几种问题 1)dp[j]装满容量j 的最大价值 2)能不能装满背包, 这是第三种,装满背包的方法有多少种?

思路:

首先,这个问题可以分解为一个加法集和一个减法集,取两者之差其实就是目标数字的值;那么找到容量为加法集的装满背包的方法,就可以求出结果

1) dp[j]的含义: dp[j]表示放容量为 j 的物品的方法;那么如果加法集合为 3 的话,已经有 dp[1], 则还需要 dp[2]的方法,所以需要累加

  // left + right = sum// left - right = targetlet left = (sum + target) / 2if(left % 1 !== 0) return 0

实现代码:

var findTargetSumWays = function(nums, target) {// left + right = sum// left - right = targetlet sum = nums.reduce((accu, curr) => accu + curr, 0)let left = (sum + target) / 2if(Math.abs(target) > sum) return 0if(left % 1 !== 0) return 0let dp = new Array(left + 1).fill(0)dp[0] = 1for(let i = 0; i < nums.length; i = i + 1) {for(let j = left; j >= nums[i]; j = j - 1) {dp[j] += dp[j - nums[i]] }}return dp[left]
};
  • 474.一和零

题目链接:. - 力扣(LeetCode)

思路: 首先这是一个 0-1 背包问题,01 背包问题的关键在于每个物品只能被放进去一次;

1) dp[i][j] dp[i][j]表示的含义是在有 i 个 0和 j 个 1 的情况下,子集的个数

2) 递推公式如果取当前的数,x和y 为当前数的 所含 0 和 1 的个数,那子集的个数应该是 dp[i - x][j - y] + 1 要和当前 dp[i][j]来比

3)初始化:初始化为 0,没有使用任何子符,则初始化为 0;

4)遍历顺序:先遍历物品,因为物品不能重复放;

5)打印 dp 数组

代码如下:

const findMaxForm = (strs, m, n) => {// 首先定义 dp[i][j] dp[i][j]表示的含义是在有 i 个 0和 j 个 1 的情况下,子集的个数// 递推公式:如果取当前的数,x和y 为当前数的 所含 0 和 1 的个数,那子集的个数应该是 dp[i - x][j - y] + 1 要和当前 dp[i][j]来比/// for...of for iterator propertylet dp = new Array(m + 1).fill().map(() => new Array(n + 1).fill(0))for(let str of strs) {let zeroNum = 0, oneNum = 0;str.split('').forEach(strItem => strItem == 0 ? zeroNum++ : oneNum++ )for(let i = m; i >= zeroNum; i--) {for(let j = n; j >= oneNum; j--) {dp[i][j] = Math.max(dp[i - zeroNum][j - oneNum] + 1, dp[i][j])}}}return dp[m][n]};console.log(findMaxForm(["11111","100","1101","1101","11000"], 5, 7))

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RocketMQ】安装RocketMQ5.2.0(单机版)

下载 官网下载地址&#xff1a;下载 | RocketMQ github地址&#xff1a;Tags apache/rocketmq GitHub 选择对应的版本下载。https://dist.apache.org/repos/dist/release/rocketmq/5.2.0/rocketmq-all-5.2.0-bin-release.zip 5.2.0的二进制包&#xff1a;下载地址 5.2.0的…

设计模式:装饰模式(Decorator)

设计模式&#xff1a;装饰模式&#xff08;Decorator&#xff09; 设计模式&#xff1a;装饰模式&#xff08;Decorator&#xff09;模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景应用实例模式扩展参考 设计…

Git多人协作场景的使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Firefox浏览器网页上的按钮点击无效解决办法

我在github下点下载经常不好使&#xff0c;查了原因&#xff0c;原来是浏览器的问题。在Firefox浏览器的设置里面&#xff0c;去掉一些cookies的禁用即可。之后&#xff0c;就可以点击按钮成功响应了。

2024 全新 Javascript 面试题目基础篇

1. JavaScript 是单线程的吗&#xff1f; 没错&#xff0c;JavaScript 是 一种 单线程语言。这意味着它只有 一个调用栈和一个内存堆。每次只执行一组指令。 此外&#xff0c;JavaScript 是同步和阻塞 的性质。这意味着代码是逐行执行的&#xff0c;一个任务必须在下一个任务…

JVM的相关知识

目录 JVM内存划分 类加载过程 类加载中的“双亲委派模型” JVM内存划分 JVM也就是java进程。这个进程一旦跑起来之后&#xff0c;就会从操作系统里&#xff0c;申请一大块内存空间。JVM接下来就要进一步的对这个大的空间进行划分。划分成不同区域&#xff0c;从而每个区域都…

如何实时掌握手机号状态的API利器分析

在移动互联网的时代&#xff0c;手机号码不仅是通信的连接点&#xff0c;也是用户身份的关键识别。手机状态查询API 通过提供实时的手机号码状态查询服务&#xff0c;协助企业和组织更有效地管理用户信息&#xff0c;提升服务流程。 手机状态查询API 通过与电信运营商的数据库进…

Golang | Leetcode Golang题解之第117题填充每个节点的下一个右侧节点指针II

题目&#xff1a; 题解&#xff1a; func connect(root *Node) *Node {start : rootfor start ! nil {var nextStart, last *Nodehandle : func(cur *Node) {if cur nil {return}if nextStart nil {nextStart cur}if last ! nil {last.Next cur}last cur}for p : start; …

C++ CSV 中文 乱码 UTF-8 ANSI

要正确读取包含中文字符的CSV文件&#xff0c;需要确保文件是以UTF-8编码保存的&#xff0c;并且在读取文件时正确处理编码。使用 std::wifstream 并设置其字节流的编码方式可以解决乱码问题。以下是修改后的代码&#xff1a; 代码说明&#xff1a; 设置UTF-8编码&#xff1a;…

学至乎没而后止也

开场白 学至后没而后止也这个题目的原话来自与荀子《劝学》。大家知道什么意思吗&#xff1f;学习要学到你人没了&#xff0c;才算停止了。通俗点说就是只要没学死就往死里学&#xff0c;高雅点说就是要保持终身学习。 在以前说终身学习好像是一种良好习惯或品德&#xff0c;…

43-2 Linux入侵排查实验

环境准备: 老规则,我没有靶场就自己搭建了类似, 这里准备一台CentOS 7虚拟机作为受害者,然后使用CS制作木马并在受害者主机上线,具体过程可以看我之前写的一篇文章: 黑客必备利器:如何在系统上安装和使用 CobaltStrike(简称:CS)_cobalt strike-CSDN博客 最终的效果…

Go语言数据库框架 — Gorm

Go入门之Gorm 框架_go gorm-CSDN博客 https://zhuanlan.zhihu.com/p/677057361 一、简介 Gorm框使用ORM技术&#xff0c;将对象(O)和关系数据库(R)之间的映射(M)抽象出来&#xff0c;开发者通过操作对象的方式操作数据库&#xff0c;不需要直接处理SQL语句&#xff0c;降低了…

CANDela studio之CDDT与CDD

CDDT有更高的权限&#xff0c;作为模板规范CDD文件。 CDD可修改的内容比CDDT少。 CDDT根据诊断协议提供诊断格式&#xff0c;主要就是分类服务和定义服务&#xff0c;一般是OEM释放&#xff0c;然后由供应商细化成自己零部件的CDD文件。 在这里举个例子&#xff0c;OEM在CDDT…

Java | Leetcode Java题解之第117题填充每个节点的下一个右侧节点指针II

题目&#xff1a; 题解&#xff1a; class Solution {Node last null, nextStart null;public Node connect(Node root) {if (root null) {return null;}Node start root;while (start ! null) {last null;nextStart null;for (Node p start; p ! null; p p.next) {if…

编译链接问题

问题描述 C语言在编译的时候&#xff0c;提示链接的时候没有找到相应的方法 问题分析 代码文件结构&#xff1a; test.c test/1.c test/1.h test.c代码&#xff1a; #include “test/1.h” void main() { hello(); } test/1.c代码&#xff1a; void hello() { printf(“hel…

AIGC中国开发者大会:AI Agent中国落地发展现状及多模态结合具身智能的发展展望

引言 2024年5月25日&#xff0c;第三届AIGC中国开发者大会在昆仑巢成功举办。本次大会围绕“AI Agent的国内应用现状及多模态结合具身智能的发展展望”这一主题&#xff0c;邀请了多位知名企业家、投资人以及技术专家&#xff0c;共同探讨大模型在中国各行各业的应用现状及未来…

AURIX TC3xx单片机介绍-启动过程介绍3

如下的内容是英文为主,对于TC3xx芯片启动原理不清楚的,可以给我留言,我来解答你们的问题! 3.2.1 Reset类型识别 Reset类型的识别是用来判断上次的复位是Application Reset还是System Reset还是CPU0 Reset。基于复位的原因,启动软件会运行不同的分支逻辑。复位原因可以通…

文章结尾,铺垫下一章带来的期待

你是否容易在阅读时打瞌睡? 是否有很多买回来的书,放在书架上一年甚至几年都未读完,积满了灰尘? 但是,对于小说和电视剧,你却完全停不下来。每集片尾的预告激发了你持续观看下一集的渴望,带来了无限的期待…… 当你撰写文章或编写工具书时,内容可能呈现出乏味的面貌…

Web前端发射爱心:揭秘技术与创意的交融之旅

Web前端发射爱心&#xff1a;揭秘技术与创意的交融之旅 在数字化的世界中&#xff0c;Web前端技术如同一位巧手的魔术师&#xff0c;将代码转化为绚丽多彩的界面&#xff0c;让用户感受到前所未有的体验。而今天&#xff0c;我们将踏上一段特别的旅程&#xff0c;探索如何使用…

pelican,一个超强的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - pelican。 Github地址&#xff1a;https://github.com/getpelican/pelican 在当今数字化时代&#xff0c;博客已经成为个人和企业分享信息、展示成果的重要途径。静态网站…