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

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

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

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

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

示例 :

输入:stones = [2,7,4,1,8,1]
输出:1
解释:
组合 24,得到 2,所以数组转化为 [2,7,1,8,1],
组合 78,得到 1,所以数组转化为 [2,1,1,1],
组合 21,得到 1,所以数组转化为 [1,1,1],
组合 11,得到 0,所以数组转化为 [1],这就是最优值。

解答:

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

算法总结:

最后一块石头本题根据题意我们知道要切分每块石头(石头之间是两两配对的)所以我们不难发现,如果总和的一半恰好是一堆石头的重量则为最优情况,所以本题本质上和昨天的规划问题思路类似。

494. 目标和:

题目链接
给你一个非负整数数组 nums 和一个整数 target 。

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

例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

示例 :

输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3

解答:

class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for (int i = 0; i < nums.length; i++) sum += nums[i];if ( target < 0 && sum < -target) return 0;if ((target + sum) % 2 != 0) return 0;int size = (target + sum) / 2;if(size < 0) size = -size;int[] dp = new int[size + 1];dp[0] = 1;for (int i = 0; i < nums.length; i++) {for (int j = size; j >= nums[i]; j--) {dp[j] += dp[j - nums[i]];}}return dp[size];}
}

算法总结:

目标和要求我们求出最终目标,所以我们可以根据最终目标,再根据总和求出正数的和,即是我们背包问题中的背包空间,本题的dp[i]表示为方法数量,那么在我们递归nums[i]的过程中dp[i]也应该是变化的,则有递推公式: dp[j] += dp[j - nums[i]];

474. 一和零:

题目链接
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。
请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。
如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

示例 :

输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
输出:4
解释:最多有 5031 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。
其他满足题意但较小的子集包括 {"0001","1"}{"10","1","0"}{"111001"} 不满足题意,因为它含 41 ,大于 n 的值 3

解答:

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 {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];}
}

算法总结:

本题的dp含义是i个0,j个1的集合中共有dp[i][j]个元素,那么有递推公式:dp[i][j] = Math.max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1); dp[i - zeroNum][j - oneNum] + 1表示为放入当前元素的情况,dp[i][j]为不放入

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

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

相关文章

为你自己学laravel - 15 - model的更新和删除

为你自己学laravel。 model的部分。 这一次讲解的是model当中怎么从数据库当中更新数据和删除数据。 先从数据库当中抓出来资料。 当然我们是使用php artisan tinker进入到终端机。 我们的做法是想要将available这个栏位修改成为true。 第一种更新方法 上面我们就是修改了对…

python实现一个图片查看器——可拖动、缩放和颜色画笔

目录 0 前言1 准备工作2 窗口布局3 图片显示功能3 图片拖拽功能4 图片缩放功能&#xff08;难度大&#xff09;5 画笔功能6 颜色选择功能后记源码 0 前言 在现如今的数字时代&#xff0c;我们对于图片的需求越来越大。无论是在工作中&#xff0c;还是在日常生活中&#xff0c;…

log4js-node在nodejs项目中的使用示例

在Node.js项目中使用log4js-node模块可以帮助你记录日志。以下是一个简单的示例&#xff0c;演示了如何在Node.js项目中使用log4js-node模块&#xff1a; 首先&#xff0c;你需要安装log4js-node模块。在终端中执行以下命令&#xff1a; npm install log4js 接下来&#xff…

学习使用echarts图表中formatter的用法,格式化数字金额,控制x轴、y轴展示长度

学习使用echarts图表中formatter的用法&#xff0c;格式化数字金额&#xff0c;控制x轴、y轴展示长度 控制金额长度两位小数&#xff0c;并去除多余.00效果图 控制文字长度完整代码 控制金额长度 series: [{name: ,type: bar,sort: none,label: { //饼图图形上的文本…

pcl三角面片拼接和PCL库的bug修复

PCL面片拼接代码如下,我使用的1.10.1PCL,这个版本的库存在问题会导致输出的结果错误,在cc会报错: An error occurred while loading ‘combined mesh’ // 读取第一个PLY文件pcl::PolygonMesh mesh1;pcl::io::loadPLYFile("hole.ply", mesh1);// 读取第二个PLY文件pc…

GitHub two-factor authentication开启教程

问题描述 最近登录GitHub个人页面动不动就有一个提示框”… two-factor authentication will be required for your account starting Jan 4, 2024 …“&#xff0c;点击去看了一下原来是GitHub对所有的用户登录都要开启双重身份认证&#xff0c;要在1月4号前完成 解决办法 …

玩转大数据19:数据治理与元数据管理策略

随着大数据时代的到来&#xff0c;数据已经成为企业的重要资产。然而&#xff0c;如何有效地管理和利用这些数据&#xff0c;成为了一个亟待解决的问题。数据治理和元数据管理是解决这个问题的关键。 1.数据治理的概念和重要性 数据治理是指对数据进行全面、系统、规范的管理…

基于Spring的枚举类+策略模式设计(以实现多种第三方支付功能为例)

摘要 最近阅读《贯彻设计模式》这本书&#xff0c;里面使用一个更真实的项目来介绍设计模式的使用&#xff0c;相较于其它那些只会以披萨、厨师为例的设计模式书籍是有些进步。但这书有时候为了使用设计模式而强行朝着对应的 UML 图来设计类结构&#xff0c;并且对设计理念缺少…

易点易动固定资产集成飞书,实现固定资产的一站式高效管理

在现代商业环境中&#xff0c;固定资产管理对于企业的运营和成功至关重要。然而&#xff0c;传统的资产管理方式往往繁琐、容易出错&#xff0c;并且缺乏实时性和准确性。为了解决这些挑战&#xff0c;易点易动与飞书进行了集成合作&#xff0c;推出了一种全新的解决方案&#…

common-pool的GenericObjectPool源码创建borrowObject方法研读

对象池主要管理对象的池&#xff0c;包含借用&#xff0c;归还&#xff0c;添加对象&#xff0c;校验对象是否有效等管理功能 public T borrowObject(final long borrowMaxWaitMillis) throws Exception {assertOpen();final AbandonedConfig ac this.abandonedConfig;if (ac …

ASP.NET Core面试题之Redis高频问题

&#x1f388;&#x1f388;在.NET后端开发岗位中&#xff0c;如今也少不了、微服务、分布式、高并发高可用相关的面试题&#x1f388;&#x1f388; &#x1f44d;&#x1f44d;本文分享一些整理的Redis高频面试题&#x1f389; &#x1f44d;&#x1f44d;机会都是给有准备…

Springboot访问html页面

目录 1、html页面创建 2、打开application.properties,添加如下配置 3、Controller中的代码 4、测试效果 项目结构如图 1、html页面创建 在原有的项目resouces目录下创建static包,并在static下创建pages,然后在pages包下index.html. index.html内容 <!DOCTYPE html>…

机器学习基础实验(人口收入普查数据探索)

本次挑战中&#xff0c;你需要运用 Pandas 探索数据&#xff0c;并回答有关 Adult 数据集 的几个问题。Adult 数据集是一个关于人口收入普查的数据集&#xff0c;其包含多个特征&#xff0c;目标值为类别类型。 首先&#xff0c;我们加载并预览该数据集。 import warnings i…

打破微软封印面向未来创建.NET Framework4.8工程

摘要&#xff1a; 工程从.NET Framework 4.8升级到.NET 8.0&#xff0c;即使采用官方方案也是很繁琐的一件事情&#xff0c;而且容易出问题。Windows 11内置了.NET Framework 4.8&#xff0c;所以当前的软件需要基于.NET Framework 4.8。但后续微软推出Windows 12&#xff0c;…

海康威视IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)

漏洞介绍 海康威视IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版本存在操作系统命令注入漏洞&#xff0c;该漏洞源于文件/ph…

Linux网络编程(一):网络基础(下)

参考引用 UNIX 环境高级编程 (第3版)黑马程序员-Linux 网络编程 1. 协议的概念 1.1 什么是协议 从应用的角度出发&#xff0c;协议可理解为 “规则”&#xff0c;是数据传输和数据解释的规则 假设&#xff0c;A、B双方欲传输文件&#xff0c;规定&#xff1a; 第一次&#xff…

基于vue-cli快速发布vue npm 包

一、编写组件 1. 初始化项目并运行 vue create vue-digital-countnpm run serve2. 组件封装 新建package文件夹 ​ 因为我们可能会封装多个组件&#xff0c;所以在src下面新建一个package文件夹用来存放所有需要上传的组件。 ​ 当然&#xff0c;如果只有一个组件&#xff…

Guava事件总线的应用与最佳实践

第1章&#xff1a;引言 走过路过不要错过&#xff01;今天&#xff0c;小黑带大家深入了解Guava事件总线&#xff08;EventBus&#xff09;。咱们先聊聊&#xff0c;为什么这个东西这么酷&#xff1f;如果你是一名Java开发者&#xff0c;肯定知道&#xff0c;管理复杂的应用程…

JS常用方法

1、reduce()统计 &#xff08;1&#xff09;数组和 计算并返回给定数组 arr 中所有元素的总和 let arr [1,4,3,6,2,6] function sum(){const newArr arr.reduce((pre,item)>{return preitem})console.log(newArr);//22 } sum() 2、filter()过滤器 &#xff08;1&#…

【Kafka集群架构设计原理】

文章目录 一、Kafka的Zookeeper元数据梳理 一、Kafka的Zookeeper元数据梳理 1、zookeeper整体数据 Kafka将状态信息保存在Zookeeper中&#xff0c;这些状态信息记录了每个Kafka的Broker服务与另外的Broker服务 有什么不同。通过这些差异化的功能&#xff0c;共同体现出集群化的…