当前位置: 首页 > news >正文

Day32 | 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

语言

Java

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

最后一块石头的重量 II

题目

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。

思路

动规五部曲

1.dp数组的含义:代表能装的最大重量

为什么要取最大重量呢?我们的思路是把整个石头重量加在一起。

总重量除以2,用一半与另外一半相撞就能得到最小的值。

2.初始化:初始化为0,因为重量非负数

3.递推公式:dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);

这个公式的意思是判断取这个石头和不取这块哪个更大,取大的值

4.遍历顺序:先遍历石头,再遍历背包大小。

5.举例推导是否存在错误,可以打印出来。

代码

class Solution {public int lastStoneWeightII(int[] stones) {int num = 0;for (int i : stones) {//获取石头的总重量num += i;}//初始化int target = num / 2;int[] dp = new int[target + 1];//循环遍历for (int i = 0; i < stones.length; i++) {//遍历物品for (int j = target; j >= stones[i]; j--) {dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);//递推公式}}return num - dp[target] - dp[target];}
}

易错点

遍历背包大小的时候。判断条件我还不是很清晰,我去复习昨天的01背包问题。

递推公式不太熟悉,知道是获取最大值stones[i]这出现问题了,复习巩固。

返回值 的意思是num - dp[target] 肯定比 dp[target]大,返回击碎得最小值。

494. 目标和  

目标和

题目

给你一个非负整数数组 nums 和一个整数 target 。

向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :

  • 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。

返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

思路

定义一个正数集合left,和负数集合right

正数代表需要加的所有数,负数集合代表要减的所有数

sum = left + right;

target = left - right;

right = sum - left;

left = (sum + target) / 2;

因为nums和target是固定的

所以我们要求的变成了找出和为left的集合。

如果left = (sum + target) / 2;为奇数证明没有结果返回0;

如果target的绝对值大于sum证明和肯定到不了target。也返回0;

接下来开始动规五部曲

1.dp数组的含义:表示dp[j]代表的最多方法。

2.推导递推公式:dp[j] += dp[j - nums[i]];

怎么推导出来的呢?

根据dp[3] = dp[2] + dp[1] + dp[0];

知道了nums[i] 就 知道dp数组了。

例如:dp[j],j 为5,

已经有一个1(nums[i]) 的话,有 dp[4]种方法 凑成 容量为5的背包。
已经有一个2(nums[i]) 的话,有 dp[3]种方法 凑成 容量为5的背包。
已经有一个3(nums[i]) 的话,有 dp[2]种方法 凑成 容量为5的背包
已经有一个4(nums[i]) 的话,有 dp[1]种方法 凑成 容量为5的背包
已经有一个5 (nums[i])的话,有 dp[0]种方法 凑成 容量为5的背包
那么凑整dp[5]有多少方法呢,也就是把 所有的 dp[j - nums[i]] 累加起来。

3.初始化:将dp[0] = 1;可以这么类比在空间为0的情况下,只有一种方法。

4.遍历顺序:依旧是先物品再容量

5.举例推导正确性,可以遍历试试。

代码

class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];}if ((sum + target) % 2 == 1) return 0;if (Math.abs(target)> sum) return 0;int bigSum = (sum + target) / 2;int[] dp = new int[bigSum + 1];//决定dp数组的含义dp[0] = 1;//初始化for (int i = 0; i < nums.length; i++) {//遍历顺序先物品for (int j = bigSum; j >= nums[i]; j--) {dp[j] += dp[j - nums[i]];//递推公式}}return dp[bigSum];//返回最多的方法}
}

易错点

两个判读返回0的情况下要记得。

多推敲递推公式。

返回值为和为方法最多,即正数结合的数。

474.一和零 

一和零 

题目

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。

请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

思路

本题依然可以转变成01背包问题

动规五部曲开始破解

1.dp数组的含义:本题采取了二维数组,分别表示0、1的个数,值为子集的个数。

2.推导递推公式:dp[i][j] = Math.max(dp[i][j], dp[i - zeroNum][j -oneNum] + 1);

与基础01背包递推公式相似,都是取最大。

3.初始化:初始化都为0.

4.遍历顺序:先物品再容量,倒序遍历

5.举例推导结果。

代码

class Solution {public int findMaxForm(String[] strs, int m, int n) {int[][] dp = new int[m + 1][n + 1];int oneNum, zeroNum;for (String str : strs) {oneNum = 0;zeroNum = 0;for (char ch : str.toCharArray()) {if (ch == '0') {zeroNum++;} else if (ch == '1') {oneNum++;}}for (int i = m; i >= zeroNum; i--) {for (int j = n; j >= oneNum; j--) {dp[i][j] = Math.max(dp[i][j], dp[i - zeroNum][j -oneNum] + 1);}}}return dp[m][n];}
}

易错点

遍历顺序要倒序。

总结

还是01背包问题的应用。

继续努力!

常常是最后一把钥匙打开了门

相关文章:

Day32 | 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

语言 Java 1049. 最后一块石头的重量 II 最后一块石头的重量 II 题目 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 …...

linux 查看一个端口是否被占用

1 linux命令 要在Linux中查看一个端口是否被占用&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开终端&#xff08;Terminal&#xff09;。 运行以下命令来列出系统上所有正在监听的端口及其对应的进程&#xff1a; sudo netstat -tuln | grep LISTEN这将显示所有正在…...

【Git】5. 配置 Git

配置.gitignore – 忽略特殊⽂件 在⽇常开发中&#xff0c;我们有些⽂件不想或者不应该提交到远端&#xff0c;⽐如保存了数据库密码的配置⽂件&#xff0c;那怎么让 Git 知道呢&#xff1f; 在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件&#xff0c;然后把要忽略的…...

C语言:文件处理

文件处理 一、文件的类型&#xff08;一&#xff09;文本文件和二进制文件 &#xff08;二&#xff09;程序文件和数据文件数据文件按照二进制储存 二、文件的打开和关闭&#xff08;一&#xff09;文件指针&#xff08;二&#xff09;文件的打开和关闭1、fopen2、fclose &…...

SpringBoot MybatisPlus selectOne的坑

目录 一、问题 二、问题解决 三、其他方法 一、问题 selectOne在查询多条数据时会报错&#xff0c;查询语句并不会加 limit 1。 One record is expected, but the query result is multiple records。 二、问题解决 在QueryWrapper上添加如下&#xff1a; QueryWrapper&…...

Spring源码-ClassPathXmlApplicationContext的refresh()都做了什么?

AbstractApplicationContext的refresh方法 /*** 用给定的父类创建一个新的ClassPathXmlApplicationContext* Create a new ClassPathXmlApplicationContext with the given parent,* 从给定的XML文件加载定义* loading the definitions from the given XML files.* param confi…...

网站加密和混淆技术简介

我们在爬取网站的时候&#xff0c;会遇到一些需要分析接口或 URL 信息的情况&#xff0c;这时会有各种各样类似加密的情况 1. 某个网站的URL 带有一些看不懂的长串加密字符&#xff0c;要抓取就必须懂的这些参数是怎么构造的&#xff0c;否则我们连完整的 URL 都构造不出来&am…...

Kafka + Kraft 集群搭建教程,附详细配置及自动化安装脚本

本文主要介绍 kafka kraft 搭建过程&#xff0c;主要用途是为了日志采集&#xff0c;所以搭建相对比较简单暴力&#xff0c;不过也可以作为一个参考供大家学习&#xff0c;主打一个能用管跑&#xff08;调优啊&#xff0c;参数解释啊&#xff0c;原理啊&#xff0c;太枯燥了&a…...

“Apple Intelligence”的“系统提示词”被曝光了

当 苹果的 Apple Intelligence 还未完全开放体验时&#xff0c;其提示词就已经曝光了。 苹果如何指挥 AI 干活&#xff0c;这次被泄露的非常彻底。我们就拿邮件来说&#xff0c;借助 AI&#xff0c;收发及回复邮件变得非常简单&#xff0c;但背后的逻辑是内置提示词在拿捏。 比…...

django学习-数据表操作

一、数据表操作 1. 数据新增 由模型实例化对象调用内置方法实现数据新增&#xff0c;比如单数据新增调用create&#xff0c;查询与新增调用get_or_create&#xff0c;修改与新增调用update_or_create&#xff0c;批量新增调用bulk_create。 1.1 create() # 方法一 # 使用cr…...

机器学习-决策树

决策树 决策树1. 简介2. ID3 决策树3. C4.5决策树4. CART决策树5. 决策树对比6. 正则化 剪枝 决策树 1. 简介 """ 简介一种树形结构树中每个内部节点表示一个特征的判断每个分支代表一个判断结果的输出每个叶节点代表一种分类结果建立过程1. 特征选择选取有较…...

opencascade TopoDS_Shape源码学习【重中之重】

opencascade TopoDS_Shape 前言 描述了一个形状&#xff0c;它 引用了一个基础形状&#xff0c;该基础形状有可能被赋予一个位置和方向 为基础形状提供了一个位置&#xff0c;定义了它在本地坐标系中的位置为基础形状提供了一个方向&#xff0c;这是从几何学的角度&#xff…...

Self-study Python Fish-C Note15 P52to53

函数 (part 5) 本节主要讲函数文档、类型注释、内省、高阶函数 函数文档、类型注释、内省 (P52) 函数文档 函数是一种代码封装的方法&#xff0c;对于一个程序来说&#xff0c;函数就是一个结构组件。在函数的外部是不需要关心函数内部的执行细节的&#xff0c;更需要关注的…...

Java小白入门到实战应用教程-异常处理

Java小白入门到实战应用教程-异常处理 前言 我们这一章节进入到异常处理知识点的学习。异常是指程序在运行时遇到的一种特殊情况&#xff0c;它能打断了正常的程序执行流程。 而异常处理是一项至关重要的技术&#xff0c;它使得程序能够优雅地处理运行时错误&#xff0c;避免…...

使用Anaconda安装多个版本的Python并与Pycharm进行对接

1、参考链接 Anaconda安装使用教程解决多Python版本问题_anaconda安装多个python版本-CSDN博客 基于上面的一篇博客的提示&#xff0c;我做了尝试。并在Pycharm的对接上做了拓展。 2、首先安装Anaconda 这个比较简单&#xff0c;直接安装即可&#xff1a; 3、设置conda.exe的…...

android系统中data下的xml乱码无法查看问题剖析及解决方法

背景&#xff1a; Android12高版本以后系统生成的很多data路径下的xml都变成了二进制类型&#xff0c;根本没办法看xml的内容具体如下&#xff1a; 比如想要看当前系统的widget的相关数据 ./system/users/0/appwidgets.xml 以前老版本都是可以直接看的&#xff0c;这些syste…...

​MySQL——索引(三)创建索引(2)使用 CREATE INDEX 语句在已经存在的表上创建索引

若想在一个已经存在的表上创建索引&#xff0c;可以使用 CREATE INDEX.语句&#xff0c;CREATEINDEX语句创建索引的具体语法格式如下所示: CREATE [UNIQUEIFULLTEXTISPATIAL]INDEX 索引名 ON 表名(字段名[(长度)J[ASCIDESC]); 在上述语法格式中&#xff0c;UNIQUE、FULLTEXT 和…...

html+css 实现hover选择按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目…...

Python数据可视化利器:Matplotlib详解

目录 Matplotlib简介安装MatplotlibMatplotlib基本用法 简单绘图子图和布局图形定制 常见图表类型 折线图柱状图散点图直方图饼图 高级图表和功能 3D绘图热图极坐标图 交互和动画与其他库的集成 与Pandas集成与Seaborn集成 常见问题与解决方案总结 Matplotlib简介 Matplotli…...

2024 NVIDIA开发者社区夏令营环境配置指南(Win Mac)

2024 NVIDIA开发者社区夏令营环境配置指南(Win & Mac) 1 创建Python环境 首先需要安装Miniconda&#xff1a; 大家可以根据自己的网络情况从下面的地址下载&#xff1a; miniconda官网地址&#xff1a;https://docs.conda.io/en/latest/miniconda.html 清华大学镜像地…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...

职坐标物联网全栈开发全流程解析

物联网全栈开发涵盖从物理设备到上层应用的完整技术链路&#xff0c;其核心流程可归纳为四大模块&#xff1a;感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性&#xff0c;例如传感器选型需平衡精度与…...

C/Python/Go示例 | Socket Programing与RPC

Socket Programming介绍 Computer networking这个领域围绕着两台电脑或者同一台电脑内的不同进程之间的数据传输和信息交流&#xff0c;会涉及到许多有意思的话题&#xff0c;诸如怎么确保对方能收到信息&#xff0c;怎么应对数据丢失、被污染或者顺序混乱&#xff0c;怎么提高…...

大陆4D毫米波雷达ARS548调试

本文介绍了大陆ARS548毫米波雷达的调试与测试流程&#xff0c;主要包括以下内容&#xff1a; 设备参数&#xff1a;最大检测距离301m&#xff08;可调93-1514m&#xff09;&#xff0c;支持gPTP时间同步。 接线调试&#xff1a; Windows需使用USB-RJ45转换器 Linux可直接连接网…...

gorm 配置数据库

介绍 GORM 是 Go 语言中最流行的 ORM&#xff08;对象关系映射&#xff09;库之一&#xff0c;基于数据库操作的封装&#xff0c;提供类似 Django ORM / SQLAlchemy 的开发体验。 特性描述支持多种数据库MySQL、PostgreSQL、SQLite、SQL Server、ClickHouse 等自动迁移自动根…...