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

算法训练(leetcode)二刷第三十一天 | 1049. 最后一块石头的重量 II、494. 目标和、*474. 一和零

刷题记录

  • 1049. 最后一块石头的重量 II
  • *494. 目标和
    • 二维数组
    • 滚动数组
  • *474. 一和零

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

leetcode题目地址

本题与416. 分割等和子集类似。依旧是01背包问题,本题尽可能将石头分为相等(相近)的两堆,然后两堆求差取绝对值既可。dp[j]表示背包容量为j时背包中物品的最大重量。

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {public int lastStoneWeightII(int[] stones) {int sum = 0;for(int i=0; i<stones.length; i++){sum += stones[i];}int target = sum / 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 Math.abs(sum-dp[target]*2);}
}

*494. 目标和

leetcode题目地址

二维数组

首先对所有数字求和得到sum。

设添加‘+’的数字和为x,则添加‘-’的数字之和为sum-x,则有:target = x - ( sum - x ).

则,x = ( target + sum ) / 2. 这样就将问题简化为求能够组合(添加‘+’)成 x 的数字和的方案数。

当上式中的除以2无法整除时,说明当前数组无法组合出target的方案,返回0.

要求组合成x的方案数,则将x作为背包容量。

dp[i][j]记录背包容量为 j 时,使用 0-i 的物品可以(恰好)装满背包的方案数。

当 j=0 时,即背包容量为0,若 0-i 中没有0,则只有1种方案就是不放物品;若 0-i 中有 k 个 0,则方案数为 2 ^ k(这里的来由是:每一个0都有2个状态,即选或不选,因此k个0就有 2 ^ k种组合) ;

当 i=0 时,即只使用第0个物品,只有 j == nums[0] 时的方案为1。

  • 当访问到物品i时,若背包容量 j 可以放下当前物品 nums[i],则当前物品有两种状态,即选或不选。
    • 选:背包需要腾出当前物品大小的空间来存放当前物品,即dp[i-1][j-nums[i]]
    • 不选:dp[i-1][j]
      则有:dp[i][j] = dp[i-1][j-nums[i]] + dp[i-1][j]
  • 若背包容量 j 放不下当前物品 nums[i], 则dp[i][j] = dp[i-1][j].

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n 2 ) O(n^2) O(n2)

// java
class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for(int i=0; i<nums.length; i++){sum += nums[i];}if(Math.abs(target)>sum) return 0;if((sum+target)%2==1) return 0;int x = (sum+target)/2;int[][] dp = new int[nums.length][x+1];if(nums[0]<=x) dp[0][nums[0]] = 1;int zeroCnt = 0;for(int i=0; i<nums.length; i++){if(nums[i] == 0){zeroCnt++;}dp[i][0] = (int)Math.pow(2, zeroCnt);}for(int i=1; i<nums.length; i++){for(int j=0; j<=x; j++){if(j>=nums[i]){dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i]];}else{dp[i][j] = dp[i-1][j];}}}return dp[nums.length-1][x];}
}

滚动数组

思路同上,只是有一些小细节需要处理:

  • 所有元素都只使用一次,因此遍历背包容量需要从后向前。
  • 在初始化第一个元素即dp[0]时,需要注意,若nums[0]为0,则有2种方案(选或不选),反之只有一种方案(不选)。

时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( n ) O(n) O(n)

// java
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 != 0) return 0;if(Math.abs(target) > sum) return 0;int x = (sum+target)/2;int[] dp = new int[x+1];if(x >= nums[0]) dp[nums[0]] = 1;dp[0] = (nums[0]==0) ? 2 : 1;for(int i=1; i<nums.length; i++){for(int j=x; j>=0; j--){if(j >= nums[i]){dp[j] += dp[j-nums[i]];}}}return dp[x];}
}

*474. 一和零

leetcode题目地址

本题是一个二维的01背包问题,背包容量是两个维度,这里使用的是滚动数组思想(二维),若要用普通的dp算法则需要使用三维数组。

dp[i][j] 代表至多 i 个 0,j 个 1 的子集个数。

由于是子集个数,不同于上题的方案数, 因此这里在留出当前物品空间后需要加1.
由于是滚动数组,则在更新时需要与当前值求最大值保留。

即:dp[i][j] = max(dp[i][j], dp[i-zeroCnt][j-oneCnt]+1).

时间复杂度: O ( n 3 ) O(n^3) O(n3) -> O ( k m n ) O(kmn) O(kmn)
空间复杂度: O ( n 2 ) O(n^2) O(n2) -> O ( m n ) O(mn) O(mn)

// java
class Solution {public int findMaxForm(String[] strs, int m, int n) {int[][] dp = new int[m+1][n+1];for(int k=0; k<strs.length; k++){int zeroCnt = 0, oneCnt = 0;char[] arr = strs[k].toCharArray();// 统计当前字符串中的0、1个数for(int j=0; j<arr.length; j++){if(arr[j] == '0') zeroCnt++;else oneCnt++;}// 01背包for(int i=m; i>=zeroCnt; i--){for(int j=n; j>=oneCnt; j--){dp[i][j] = Math.max(dp[i][j], dp[i-zeroCnt][j-oneCnt]+1);}}}return dp[m][n];}
}

相关文章:

算法训练(leetcode)二刷第三十一天 | 1049. 最后一块石头的重量 II、494. 目标和、*474. 一和零

刷题记录 1049. 最后一块石头的重量 II*494. 目标和二维数组滚动数组 *474. 一和零 1049. 最后一块石头的重量 II leetcode题目地址 本题与416. 分割等和子集类似。依旧是01背包问题&#xff0c;本题尽可能将石头分为相等&#xff08;相近&#xff09;的两堆&#xff0c;然后…...

软件测试丨Pytest生命周期与数据驱动

Pytest的生命周期概述 Pytest 是一个强大的测试框架&#xff0c;提供了丰富的特性来简化测试执行。它的生命周期包括多个阶段&#xff0c;涉及从准备测试、执行测试到报告结果的完整流程。因此&#xff0c;理解Pytest的生命周期将帮助我们更好地设计和管理测试用例。 开始阶段…...

Figma入门-原型交互

Figma入门-原型交互 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的&#xff0c;对…...

网络安全防范技术

1 实践内容 1.1 安全防范 为了保障"信息安全金三角"的CIA属性、即机密性、完整性、可用性&#xff0c;信息安全领域提出了一系列安全模型。其中动态可适应网络安全模型基于闭环控制理论&#xff0c;典型的有PDR和P^2DR模型。 1.1.1 PDR模型 信息系统的防御机制能抵抗…...

Java - JSR223规范解读_在JVM上实现多语言支持

文章目录 1. 概述2. 核心目标3. 支持的脚本语言4. 主要接口5. 脚本引擎的使用执行JavaScript脚本执行groovy脚本1. Groovy简介2. Groovy脚本示例3. 如何在Java中集成 Groovy4. 集成注意事项 6. 与Java集成7. 常见应用场景8. 优缺点9. 总结 1. 概述 JSR223&#xff08;Java Spe…...

win10系统部署RAGFLOW+Ollama教程

本篇主要基于linux服务器部署ragflowollama&#xff0c;其他操作系统稍有差异但是大体一样。 一、先决条件 CPU ≥ 4核&#xff1b; RAM ≥ 16 GB&#xff1b; 磁盘 ≥ 50 GB&#xff1b; Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1。 如果尚未在本地计算机&#xff…...

基于Python制作一个简易UI界面

基于Python制作一个简易UI界面 目录 基于Python制作一个简易UI界面1 原理简介2 编写程序3 程序测试 1 原理简介 这里用到了Python自带的UI库tkinter。 tkinter 是 Python 的标准 GUI&#xff08;图形用户界面&#xff09;库&#xff0c;用于创建和管理图形界面。它提供了一个简…...

鲁菜大师程伟华到访金宫川派味业

共工新闻社11月29日电&#xff08;范琦&#xff09;上周&#xff0c;中国鲁菜大师、首批中国烹饪大师名厨程伟华到访金宫川派味业总部基地。这位从厨51年、坚持传承鲁菜的行业大师人物&#xff0c;深入了解了金宫川派的品牌文化&#xff0c;参观了金宫自动生产车间&#xff0c;…...

Linux设置jar包开机自启动

本文详细描述了如何在Linux服务器上创建并配置jar包的自启动脚本&#xff0c;包括编辑/etc/init.d/jar_auto.sh以设置环境变量&#xff0c;将jar包添加到rc.local以开机启动&#xff0c;以及提升脚本文件权限确保自动执行。 1、准备工作 Linux中Java的路径 项目jar包绝对路径 2…...

IoTDB 常见问题 QA 第一期

开始&#xff01;关于 IoTDB 的 Q&A 我们将定期汇总社区讨论频繁的问题&#xff0c;并展开进行详细回答&#xff0c;通过积累常见问题“小百科”&#xff0c;方便大家使用 IoTDB。 Q1&#xff1a;WAL 堆积导致写入失败 问题及现象 集群报错&#xff1a; The write is rejec…...

【linux学习指南】linux捕捉信号

文章目录 &#x1f4dd;前言&#x1f320; 信号捕捉的流程&#x1f309; sigaction &#x1f320;穿插话题-操作系统是怎么运⾏的&#x1f309; 硬件中断&#x1f309;时钟中断 &#x1f6a9;总结 &#x1f4dd;前言 &#x1f320; 信号捕捉的流程 如果信号的处理动作是⽤⼾⾃定…...

git如何快速拉取已经提交的mr进行验证

参考&#xff1a;https://stackoverflow.com/questions/44992512/how-to-checkout-merge-request-locally-and-create-new-local-branch Pull merge request to new branch git fetch origin merge-requests/REQUESTID/head:BRANCHNAME i.e git fetch origin merge-requests/…...

【阿来来gis规划师工具箱说明书】h07四分标注

背景 在做arcmap的四分标注前&#xff0c;已经做好了二行三行的标注&#xff0c;以及在pro中做好了四分标注。这个四分标注做了好些版本&#xff0c;都达不到想要的效果。最终使用了静态标注的形式来做。 制作思路 新建两个承接标注文字的文本字段&#xff0c;考虑一般标注超…...

【大数据学习 | 面经】HDFS的三副本机制和编码机制

1. hdfs的三副本机制 hdfs的三副本机制是其核心特性之一&#xff0c;旨在确保数据的高可用性和容错性。通过将每个文件的数据块复制三个副本&#xff0c;并分散存储在不同的DateNode上&#xff0c;hdfs能够在节点故障的时候提供数据冗余和持续访问的能力。 三副本机制的工作原…...

lua-cjson 例子

apt install -y lua-cjson 安装 编辑 tmp.lua cjson require "cjson" p 666 d "23.42" payload{"d":[{"pres":..(p)..,"temp":"..(d).."}]} print("payload " .. payload) j cjson.decode(payloa…...

java面向对象知识点: 封装,构造,重载

目录 封装 封装知识点 private&#xff08;私有&#xff09; public&#xff08;公共&#xff09; 二、getter和setter方法 getter方法&#xff08;访问器方法&#xff09; setter方法&#xff08;修改器方法&#xff09; 三、封装类的设计原则 单一职责原则 高内聚性 一…...

go的math/rand随机数生成器

伪随机数生成器&#xff0c;默认情况下随机数种子是固定的&#xff0c; **注意&#xff1a;**固定的随机数种子每次生成的随机数都是相同的随机数序列 一、基础用法 math/rand 包提供了随机数生成的方法。常用的函数包括&#xff1a; rand.Int()&#xff1a;返回一个伪随机…...

JiaJia-CP-1,2,3的WP(2)

一.JiaJia-CP-2 一看题目&#xff0c;聊天软件&#xff0c;用的什么聊天软件直接userassist看运行过什么程序 vol -f JiaJia_Co.raw --profileWin7SP1x64 userassist 发现Telegram.exe(小飞机) 可能性很大啊(真是个摸鱼大神) 除此之外&#xff0c;filescan也能看到&#xff0…...

3DMAX星空图像生成器插件使用方法详解

3DMAX星空图像生成器插件&#xff0c;一键生成星空或夜空的二维图像。它可用于创建天空盒子或空间场景&#xff0c;或作为2D艺术的天空背景。 【主要特点】 -单击即可创建星空图像或夜空。 -星数、亮度、大小、形状等参数。 -支持任何图像大小&#xff08;方形&#xff09;。…...

ROS2 系列学习教程(总目录)

ROS2Learning ROS1 系列学习教程(总目录) 一、ROS2 简介 1.1 ROS2简介及学习资源汇总 二、ROS2 基础 2.1 ROS2安装详细教程&#xff08;以Humble为例&#xff09; 2.2 ROS2 构建系统 colcon 介绍、安装与使用 2.3 ROS2 与 ROS1 编码方式对比 ROS2 与 ROS1 编码方式对比&am…...

[GKCTF 2021]签到

[GKCTF 2021]签到 wireshark跟踪http流&#xff0c;基本编解码&#xff0c;倒叙&#xff0c;栅栏密码 找到cat /f14g 把包里返回的字符串先hex解码&#xff0c;再base64解码&#xff0c;看到一个时间是倒叙&#xff0c;不含flag 继续往下面翻&#xff0c;可以看到cat%2Ff14g%7…...

Kubernetes——part11 云原生中间件上云部署 Rocketmqkafkazookeeper

Rocketmq rocketmq角色 RocketMQ由四部分构成&#xff1a;Producer、Consumer、Broker和NameServer 启动顺序&#xff1a;NameServer->Broker 为了消除单点故障&#xff0c;增加可靠性或增大吞吐量&#xff0c;可以在多台机器上部署多个nameserver和broker&#xff0c;并…...

ip租期到了

当IP租约到期后&#xff0c;会发生以下过程&#xff1a; 租约到期通知&#xff1a;在租约到期之前&#xff0c;DHCP客户端通常会尝试续租其IP地址。如果客户端仍然活跃并且希望继续使用相同的IP地址&#xff0c;它会向DHCP服务器发送一个DHCP请求&#xff08;DHCPREQUEST&#…...

鸿蒙系统(harmony)支持Android应用的双框架技术架构分析

鸿蒙系统(HarmonyOS)支持 Android 应用的双框架技术架构 是为了在鸿蒙操作系统上实现对 Android 应用的兼容与支持,特别是在多设备生态下,确保不同类型的 Android 应用能够无缝运行在鸿蒙设备上。这种双框架架构使鸿蒙能够兼顾自身的原生应用生态和 Android 的广泛应用生态…...

面积等效原理

面积等效原理 电力电子技术中的面积等效原理主要应用在PWM&#xff08;Pulse Width Modulation&#xff0c;脉冲宽度调制&#xff09;控制技术中。 定义 面积等效原理&#xff1a;当冲量&#xff08;即窄脉冲的面积&#xff09;相等而形状不同的窄脉冲加在具有惯性的环节上时…...

【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用

一、什么是BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似);BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简…...

大小写转换

描述 将下面的字符串中的大小写进行转换。 输入描述 输入一行仅包含字母的字符串(字符串长度 ≤100)。 输出描述 将其中的大写转换为小写&#xff0c;小写转换为大写。 abcD ABCd #include<iostream> #include<string> using namespace std; int main() { …...

手机镜头组如此突出,考虑恢复以前设计

现在手头看重照相。结果导致的问题就是&#xff0c;在背部要突出很高&#xff0c;以容纳镜头组件。这种设计真的好吗&#xff1f;并不见得。真实照片&#xff1a; VIVO X200系列镜头组照片-CSDN博客 考虑到现在镜头的情形&#xff0c;我建议恢复以前的设计&#xff0c;就是把镜…...

浅谈人工智能之基于容器云进行图生视频大模型搭建

浅谈人工智能之基于容器云进行图生视频大模型搭建 根据之前我们所讲过的内容&#xff1a; 文生图 文生视频 我们继续讲解图生视频大模型搭建。 引言 随着深度学习技术的不断发展&#xff0c;图生视频&#xff08;image-to-video&#xff09;大模型成为了计算机视觉和自然语言…...

大型复杂项目管理怎么结合传统与敏捷

大型复杂项目管理需要综合运用传统的瀑布模型与敏捷方法&#xff0c;两者各具优势&#xff0c;可以在不同的项目阶段和需求下发挥最大效能。首先&#xff0c;在项目的初期阶段&#xff0c;传统方法的详细规划和需求分析能够帮助确保项目方向正确、资源充足&#xff1b;敏捷方法…...

建网站怎么赚流量/河北网站seo外包

0x00 前言 上次的绕过太简单&#xff0c;也没有能注出数据或者获取权限&#xff0c;这次继续绕过&#xff0c;获取数据 0x01 过程 还是上次的站点&#xff0c;简单的判断&#xff0c;存在注入 发现and 数字、exec、union select、 select 数字。。。被过滤 发现execute函数没被…...

二手市场网站建设的目的/优化设计七年级下册数学答案

1&#xff0c;确保Linux镜像的路径存在 2&#xff0c;启动 3&#xff0c;在真实机情况下&#xff0c;进入BIOS修改安装操作系统的路径【记住&#xff1a;虚拟机不需要这一步。】 如果是真实机安装Linux&#xff0c;默认是从硬盘中安装&#xff0c;而不是从光盘。这就需要更改设…...

中企动力做的网站后台如何登陆/百度软件中心下载

1.前言 上个Shiro Demo基础搭建是基于官方的快速入门版本&#xff0c;没有集成其他框架&#xff0c;只是简单的通过Main方法来执行Shiro工作流程&#xff0c;并测试一下比较核心的函数&#xff1b;但在企业开发中一般都会集成Spring&#xff0c;因为被Spring管理后很多事情都交…...

做微商做什么网站比较好/站长推荐产品

2019独角兽企业重金招聘Python工程师标准>>> 并发产生的原因是&#xff1a;“编译器和处理器”在程序执行时会对程序进行的重排序。 重排序的原因是&#xff1a;为了提高程序的并发度&#xff0c;从而提高性能&#xff01;但是对于多线程程序&#xff0c;重排序可能…...

自己的网站中商城怎么做/seo推广技术

1 代理模式定义 定义&#xff1a;给某个对象提供一个代理对象&#xff0c;并由代理对象控制对于原对象的访问&#xff0c;即客户不直接操控原对象&#xff0c;而是通过代理对象间接地操控原对象。 本篇文章主要介绍的是静态代理&#xff0c;关于动态代理请参考&#xff1a;设…...

中国500强企业排行榜/青岛网站seo公司

前些日子&#xff0c;板叔卡了山口山的审批&#xff0c;一大堆宅男宅女没事干&#xff0c;创作出了大批优秀的山口山翻唱、视频、小说、动画片&#xff0c;自从新版本开了后&#xff0c;这些创作全停下来了&#xff0c;没啥可看的了&#xff0c;《我叫MT》和《联盟的勇士》几个…...