代码随想录算法训练营Day42 | LeetCode1049. 最后一块石头的重量 II、LeetCode494. 目标和、LeetCode474.一和零

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

这道题难点在于如何转换成背包问题,其实和上一题和相等子集合基本一样,尽量把石头分成两个重量相等的集合,那么在碰撞之后和就是最小的,石头的重量也可以当作石头的价值,代码也基本一样,就是最后的返回值是返回最小的差值,除法是向下取整,所以sum-dp[target]>dp[target]。

代码如下:时间复杂度O(m*n);空间复杂度O(m)。

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for(int i=0;i<stones.size();i++){sum += stones[i];}vector<int> dp(sum/2+1,0);for(int i=0;i<stones.size();i++){for(int j=sum/2;j>=stones[i];j--){dp[j] = max(dp[j],dp[j-stones[i]]+stones[i]);}}return sum-2*dp[sum/2];}
};

LeetCode494. 目标和

当然本题可以用回溯法,第一种回溯的思路是在每个数前遍历正负号,代码如下,时间复杂度O(2^n);第二种遍历的思路是先通过公式推导,将nums分成一个加的集合和一个减的集合,则加的集合的和则等于(sum+target)/2,则就可以用组合问题回溯的思路求解和为(sum+target)/2的组合,如果和为小数,则不存在,返回0;

class Solution {
public:int count = 0;int sum = 0;void backtracking(vector<int>& nums, int target,int index){if(index==nums.size()){if(sum==target) count++;return;}for(int i=0;i<2;i++){if(i==0){sum+=nums[index];backtracking(nums,target,index+1);sum-=nums[index];}else{sum-=nums[index];backtracking(nums,target,index+1);sum+=nums[index];}}}int findTargetSumWays(vector<int>& nums, int target) {backtracking(nums,target,0);return count;}
};

根据上述回溯算法思路,将nums数组分成两个集合,也可以用动态规划方法做。

递归五部曲:
1、dp数组含义:容量为j的背包有几种方法
2、递推公式:dp[j] += dp[j-nums[i]]
3、初始化:dp[0] = 1;
4、遍历顺序:从后往前
5、打印dp数组

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

LeetCode474.一和零

转换成背包问题思路:一个二维背包,每个维度的容量分别是m和n,有若干个物品,分别也有两个维度的重量,最后求得背包最多装几个物品。

如果只有一个维度的话,一维dp数组就可以解决问题,现在多了一个维度,需要二维dp数组。

递归五部曲:
1、dp数组含义:dp[i][j]容量为(i,j)的背包最多能装几件物品
2、递推公式:dp[i][j] = max(dp[i][j],dp[i-x][j-y]+1)
3、初始化:由于max里面包含数组本身,所以不能初始化为较大的数,初始化为0;
4、遍历顺序:与前面的题类似,物品从前往后,背包容量从后往前。
5、打印dp数组。

代码如下:时间复杂度O(kmn);空间复杂度O(mn)。

class Solution {
public:pair<int,int> computeWeight(const string& str){int count0 = 0;int count1 = 0;for(int i=0;i<str.size();i++){if(str[i]=='0') count0++;else count1++;}return pair<int,int>{count0,count1};}int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>> dp(m+1,vector<int>(n+1,0));for(int k=0;k<strs.size();k++){pair<int,int> weight = computeWeight(strs[k]);int x = weight.first;int y = weight.second;for(int i=m;i>=x;i--){for(int j=n;j>=y;j--){dp[i][j] = max(dp[i][j],dp[i-x][j-y]+1);}}}return dp[m][n];}
};

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

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

相关文章

行为型模式

行为型设计模式是面向对象编程中的一种模式&#xff0c;它关注的是对象之间的通信和协作&#xff0c;以实现特定的行为或任务。这些模式通常涉及到对象之间的消息传递、方法调用和协同工作&#xff0c;以达到更好的灵活性和可维护性。 行为型模式用于描述程序在运行时复杂的流程…

App自动化测试之Appium 环境搭建保姆级教程(全网最全)

前言 APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff…

低代码平台如何选型 盘点国内外主流低代码开发平台

随着数字化转型的加速&#xff0c;低代码开发平台作为一种新型软件开发方式&#xff0c;受到了广泛关注。国内低代码市场也呈现出蓬勃发展的态势&#xff0c;各种低代码平台如雨后春笋般涌现。本文将对国内低代码平台进行盘点&#xff0c;以帮助企业和开发者更好地了解市场情况…

strstr函数、chdir函数、access函数、strdup函数的介绍

1、strstr函数 strstr 是 C 语言中的一个字符串处理函数&#xff0c;用于在一个字符串中查找子字符串的第一次出现。 函数原型 char *strstr(const char *haystack, const char *needle); haystack&#xff1a;要在其中搜索的字符串。needle&#xff1a;要查找的子字符串。 函…

如何正确选择国外服务器的带宽和线路呢?

国外大带宽服务器是一种提供高带宽、高速网络连接和良好稳定性的服务器&#xff0c;但在中国使用这类服务器可能涉及到违反法律法规的风险。因此我无法为你提供相关帮助。接下来和源库一起了解如何正确选择国外服务器的带宽和线路呢? 考虑目标用户的地理位置。如果目标用户主要…

Facebook、亚马逊账号如何养号?

之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题&#xff0c;相信很多人也会关心在使用不同平台的时代理器的选择问题。比如&#xff0c;为什么最好…

题目 2159: 区间合并

题目描述: 给定 n 个闭区间 [ai; bi]&#xff0c;其中i1,2,...,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如&#xff0c;[1;2] 和 [2;3] 可以合并为 [1;3]&#xff0c;[1;3] 和 [2;4] 可以合并为 [1;4]&#xff0c;但是[1;2] 和 [3;4] 不可以合并。 我们的任务是…

【TypeScript系列】函数进阶

函数进阶 函数是任何应用程序的基本构建块&#xff0c;它们可以是本地函数、从另一个模块导入的函数或者类的方法。它们也是值&#xff0c;并且与其他值一样&#xff0c;TypeScript 有很多方法来描述函数的调用方式。让我们来学习如何编写用于描述函数的类型。 函数类型表达式…

错误票据 刷题笔记

开数组 读入数据 记录最小值和最大值 每次读入x; 让a[x]; 从最小值开始 向上扫 当扫到a[x]0时候为断号 扫到a[x]>1为重号&#xff1b; 该题的小技巧 未知长度的数据的读入方式 1.首先在头文件敲上 #include<sstream> #include<string> #include<…

校园外卖创业中的信息差,了解这些创业不迷路

外卖已经成为大学生日常生活的重要组成部分&#xff0c;但大部分高校对外卖都有着严格的管理&#xff0c;外卖取餐不便、配送时间过长、拿错餐等问题频出&#xff0c;基于此校园外卖创业成了高校市场的热门项目。 本文就校园外卖创业中存在的信息差展开分析&#xff0c;帮你理…

深入理解C语言中的枚举

目录 1. 枚举的定义 2. 枚举常量的赋值 3. 枚举的使用示例 4. 注意事项 在C语言中&#xff0c;枚举&#xff08;Enum&#xff09;是一种用户定义的数据类型&#xff0c;用于定义一组具名的整型常量。枚举常常用于提高代码的可读性和可维护性&#xff0c;使程序更易于理解。…

window Zookeeper 启动;

文章目录 前言一、Zookeeper 介绍&#xff1a;二、window 使用&#xff1a;2.1 下载&#xff1a;2.2 启动2.3 连接&#xff1a; 总结 前言 本文对window Zookeeper zk 启动 进行介绍&#xff1b; 一、Zookeeper 介绍&#xff1a; ZooKeeper 是一个开源的分布式协调服务&#…

mac 下redis

安装 Redis brew install redis 安装完成后&#xff0c;我们可以使用以下命令来确认 Redis 是否正确安装&#xff1a; redis-cli ping 启动 Redis redis-server 后台启动 Redis&#xff0c;可以使用以下命令&#xff1a; redis-server --daemonize yes 指定配置文件启动…

MongoDB的count() 统计文档数量非常慢

在MongoDB中&#xff0c;count()函数用于统计文档的数量。但是count()函数通常不会使用索引来计算文档数量&#xff0c;而是扫描集合中的文档来计数。当数据量较大的时候&#xff0c;就不适合使用了。 解决方案&#xff1a; 1、使用聚合框架&#xff08;aggregation framewor…

python 运行环境(Docker 容器)

Python环境标准软件基于Bitnami python 构建。当前版本为3.12 配置 运行你的Python脚本 Python 映像的默认工作目录是/app. 您可以在此处从主机挂载一个包含 Python 脚本的文件夹&#xff0c;并使用该python命令正常运行它。 docker run -it --name python -v /path/to/app…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:QRCode)

用于显示单个二维码的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 二维码组件的像素点数量与内容有关&#xff0c;当组件尺寸过小时&#xff0c;可能出现无法展示内容的情况&#xff0c;…

【Java】关于ZooKeeper的原理以及一致性问题,协议和算法和ZooKeeper的理论知识和应用 场景

1. 目录 目录 1. 目录 2. 什么是ZooKeeper 3. 一致性问题 4. 一致性协议和算法 4.1. 2PC&#xff08;两阶段提交&#xff09; 4.2. 3PC&#xff08;三阶段提交&#xff09; 4.3. Paxos 算法 4.3.1. prepare 阶段 4.3.2. accept 阶段 4.3.3. paxos 算法的死循环…

【大厂AI课学习笔记NO.79】机器学习行业人才能力图谱

有从事机器学习行业的小伙伴&#xff0c;人才岗位如上了。 同样的&#xff0c;也是分为领军人才&#xff08;略&#xff09;、产业研发人才、应用开发人才和实用技能人才了。 机器学习领域的就业岗位分析 随着科技的飞速发展&#xff0c;人工智能已成为当今时代最热门的领域…

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现

【2024泰迪杯】B 题&#xff1a;基于多模态特征融合的图像文本检索Python代码实现 1 题目 2024 年&#xff08;第 12 届&#xff09;“泰迪杯”数据挖掘挑战赛—B 题&#xff1a;基于多模态特征融合的图像文本检索 一、问题背景 随着近年来智能终端设备和多媒体社交网络平台…

Java技术栈 —— 模版引擎 Freemarker or Thymeleaf?

模版引擎 Freemarker or Thymeleaf&#xff1f; 如果你要用MVC架构开发项目&#xff0c;那模版引擎是必不可少的&#xff0c;JSP也可以被视作是模版引擎的一种&#xff0c;目前较为主流的两种模版引擎分别是Freemarker 与 Thymeleaf&#xff0c;从流行度来看&#xff0c;目前Fr…