当前位置: 首页 > 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 清华大学镜像地…...

Pr剪辑效率翻倍秘籍:除了选对GPU加速,这3个隐藏设置让你的老电脑也起飞

Pr剪辑效率翻倍秘籍&#xff1a;除了选对GPU加速&#xff0c;这3个隐藏设置让你的老电脑也起飞 在视频剪辑的世界里&#xff0c;时间就是金钱。当你盯着进度条缓慢爬行&#xff0c;或者面对频繁的卡顿和崩溃时&#xff0c;那种无力感足以让任何创意工作者抓狂。很多人第一时间…...

DeOldify多用户并发测试:100+请求下服务稳定性与响应延迟实测

DeOldify多用户并发测试&#xff1a;100请求下服务稳定性与响应延迟实测 1. 引言&#xff1a;当AI上色服务遇到真实流量考验 想象一下&#xff0c;你搭建了一个很酷的AI图片上色服务&#xff0c;平时自己用着挺顺&#xff0c;处理一张老照片也就几秒钟。但突然有一天&#xf…...

小白友好:Python3.8镜像5分钟部署教程,轻松管理多个项目环境

小白友好&#xff1a;Python3.8镜像5分钟部署教程&#xff0c;轻松管理多个项目环境 1. 为什么需要Python3.8镜像 Python作为当下最流行的编程语言之一&#xff0c;被广泛应用于Web开发、数据分析、人工智能等各个领域。但在实际开发中&#xff0c;我们经常会遇到这样的困扰&…...

从VASP的POSCAR到精美插图:一条ASE可视化流水线搭建指南

从VASP的POSCAR到精美插图&#xff1a;一条ASE可视化流水线搭建指南 在计算材料学研究中&#xff0c;我们常常需要处理大量的结构文件&#xff0c;尤其是VASP计算产生的POSCAR文件。这些文件包含了材料的原子坐标和晶格信息&#xff0c;但直接阅读文本文件很难直观理解材料的几…...

ClawdBot部署全流程:从安装到设备授权,手把手带你跑通

ClawdBot部署全流程&#xff1a;从安装到设备授权&#xff0c;手把手带你跑通 1. ClawdBot简介与核心价值 ClawdBot是一个可以在本地设备上运行的个人AI助手&#xff0c;它使用vLLM提供后端模型能力。与常见的云端AI服务不同&#xff0c;ClawdBot的设计理念强调&#xff1a; …...

C++ 智能指针的生命周期分析

C智能指针的生命周期分析 在现代C开发中&#xff0c;智能指针是管理动态内存的重要工具&#xff0c;它通过自动化的资源管理机制显著降低了内存泄漏和悬垂指针的风险。理解智能指针的生命周期对于编写高效、安全的代码至关重要。本文将深入分析智能指针的生命周期&#xff0c;…...

K3s证书过期急救指南:5分钟搞定证书轮换(附一键脚本)

K3s证书过期急救指南&#xff1a;5分钟搞定证书轮换&#xff08;附一键脚本&#xff09; 凌晨三点&#xff0c;报警短信突然炸响——K3s集群所有服务不可用。登录控制台看到满屏的x509: certificate has expired or is not yet valid报错时&#xff0c;我才意识到证书过期这个&…...

Blender模型导入Unity材质丢失?5步搞定FBX材质完美迁移

Blender模型导入Unity材质丢失&#xff1f;5步搞定FBX材质完美迁移 当你花了数小时在Blender中精心雕琢模型材质&#xff0c;导出FBX到Unity后却发现材质全部丢失——这种崩溃感每个3D开发者都深有体会。材质丢失问题看似简单&#xff0c;实则涉及Blender与Unity两套完全不同的…...

GAPSO-LSTM:遗传粒子群优化算法优化LSTM超参数的数据回归预测方法

GAPSO-LSTM&#xff0c;即遗传粒子群优化算法优化LSTM的超参数做数据回归预测&#xff0c;多输入单输出&#xff0c;预测精度高于PSO-LSTM&#xff0c;算法原理为串行GAPSO&#xff0c;PSO的寻优结果再引入高斯变异和个体杂交&#xff0c;可以解决PSO容易陷入局部最优的问题。一…...

玉米脱粒机的毕业设计(论文+12张CAD图纸+开题报告+任务书……)

玉米脱粒机作为农业机械化的重要设备&#xff0c;其核心作用在于通过机械结构与动力系统的协同&#xff0c;实现玉米果穗与籽粒的高效分离。传统人工脱粒效率低、劳动强度大&#xff0c;而机械化脱粒通过旋转滚筒与筛网的配合&#xff0c;可显著提升处理速度&#xff0c;同时降…...