DAY43:背包问题提升1049、494、474

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

这道题和昨天的最后一道题很像,都是重量和价值一样等于stone[i]。

本质思想是尽量将石头分成相似的两堆。如果出现两堆价值一样,那==0,如果不一样,就用大的那堆减去小的那堆就是最后相撞之后的重量。从而把题目化简为01背包问题。

时间复杂度:O(m × n)

空间复杂度:O(m)

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int result = 0;//需要初始化,没有初始化为0会报错for(int i = 0; i < stones.size(); i++){result += stones[i];}int target = result / 2;//分为两堆石块的目标vector<int> dp(target + 1, 0);//确定dp数组的大小for(int i = 0; i < stones.size(); i++){for(int j = target; j >= stones[i]; j--){//背包问题dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);}}return result - dp[target] - dp[target];//因为tatget = result/2向下取整,这样result-dp[target]肯定比dp[target]大}
};

Leetcode: 494 目标和

假设加法的总和为x,那么减法对应的总和就是sum - x,我们要求的是 x - (sum - x) = target,所以x = (target + sum) / 2。此时问题就转化为,装满容量为x的背包,有几种方法。这里注意/是向下取整,所以如果出现(target+sum)是奇数,是没有解的。

1、下标和定义

dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法。

2、递推公式

只要搞到nums[i],凑成dp[j]就有dp[j - nums[i]] 种方法。所以需要将所有的 dp[j - nums[i]] 累加起来。

3、初始化

初始化dp[0]=1这个很重要,如果初始化为0,就会出错因为所有的结果都是由0导出的,所以需要初始化为1,保证有一个方案

时间复杂度:O(m × n)

空间复杂度:O(m)

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(sum < abs(target)) return 0;//如果目标比总和大,肯定无法达到if((sum + target) % 2 == 1) return 0;//如果出现奇数,就有非整数int result = (sum + target) / 2;vector<int> dp(result + 1, 0);dp[0] = 1;for(int i = 0; i < nums.size(); i++){//注意从0的情况开始for(int j = result; j >= nums[i]; j--){dp[j] += dp[j - nums[i]];}}return dp[result];}
};

在求装满背包有几种方法的情况下,递推公式一般为:

dp[j] += dp[j - nums[i]];

Leetcode: 474 一和零

这道题主要是题目看不懂,思路也很难想。

参考

代码随想录

1、确定下标含义

dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。

2、递归公式

相当于这里是一个有两个维度的01背包问题。

dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);

字符串的zeroNum和oneNum相当于物品的重量(weight[i]),字符串本身的个数相当于物品的价值(value[i])。

3、递归逻辑

01背包一定是外层for循环遍历物品,内层for循环遍历背包容量且从后向前遍历!物品就是strs里的字符串,背包容量就是题目描述中的m和n。

时间复杂度为O(KMN)

空间复杂度为O(MN)

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {vector<vector<int>> dp(m + 1, vector<int> (n + 1, 0)); // 默认初始化0for (string str : strs) { // 遍历物品int oneNum = 0, zeroNum = 0;for (char c : str) {if (c == '0') zeroNum++;else oneNum++;}for (int i = m; i >= zeroNum; i--) { // 遍历背包容量且从后向前遍历!for (int j = n; j >= oneNum; j--) {dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);}}}return dp[m][n];}
};

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

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

相关文章

数据结构——D/二叉树

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.树概念及结构 1.1树的概念 树是一种非线性的…

【Android辟邪】之:gradle——在项目间共享依赖关系版本

翻译和简单修改自&#xff1a;https://docs.gradle.org/current/userguide/platforms.html#sec:sharing-catalogs 建议看原文&#xff08;有能力的话&#xff09; 现在 Gradle 脚本可以使用两种语法编写&#xff1a;Kotlin 和 Groovy 本文只使用kotlin脚本语法&#xff0c;更…

10.0 Zookeeper 权限控制 ACL

zookeeper 的 ACL&#xff08;Access Control List&#xff0c;访问控制表&#xff09;权限在生产环境是特别重要的&#xff0c;所以本章节特别介绍一下。 ACL 权限可以针对节点设置相关读写等权限&#xff0c;保障数据安全性。 permissions 可以指定不同的权限范围及角色。 …

人工智能:数据分析之数据预处理、分析模型与可视化

在人工智能和数据科学领域&#xff0c;数据分析是一种核心过程&#xff0c;它帮助我们从大量的数据中提取有价值的信息。数据分析的质量和结果直接影响到决策的效率和准确性。在这篇博客中&#xff0c;我们将详细探讨数据分析的关键步骤&#xff0c;包括数据预处理、分析模型和…

Oracle 面试题 | 15.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

AR人脸106240点位检测解决方案

美摄科技针对企业需求推出了AR人脸106/240点位检测解决方案&#xff0c;为企业提供高效、精准的人脸识别服务&#xff0c;采用先进的人脸识别算法和机器学习技术&#xff0c;通过高精度、高速度的检测设备&#xff0c;对人脸进行快速、准确地定位和识别。该方案适用于各种应用场…

Backtrader 文档学习- Observers - Benchmarking

Backtrader 文档学习- Observers - Benchmarking 1.概述 backtrader包括两种不同类型的对象&#xff0c;可以帮助跟踪&#xff1a; Observers 观察者Analyzers 分析器 在分析器领域中&#xff0c;已有TimeReturn对象&#xff0c;用于跟踪整个组合价值&#xff08;即包括现金…

黑马Java——集合进阶(List、Set、泛型、树)

一、集合的体系结构 1、单列集合&#xff08;Collection&#xff09; 二、Collection集合 1、Collection常见方法 1.1代码实现&#xff1a; import java.util.ArrayList; import java.util.Collection;public class A01_CollectionDemo1 {public static void main(String[] a…

Token、CAS、JWT和OAuth 2.0认证系统认证中心系统设计对比与实践总结

在现代应用开发中&#xff0c;身份认证是一个关键的问题。为了解决身份认证的需求&#xff0c;开发人员可以选择不同的认证系统&#xff0c;如Token、CAS&#xff08;Central Authentication Service&#xff09;和JWT&#xff08;JSON Web Token&#xff09;OAuth 2.0认证系统…

大厂聚合支付系统架构演进(上)

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; 作者简介&#xff1a;魔都国企技术专家兼架构&#xff0c;多家大厂后端一线研发经验&#xff0c;各大技术社区…

1.0 Zookeeper 分布式配置服务教程

ZooKeeper 是 Apache 软件基金会的一个软件项目&#xff0c;它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。 ZooKeeper 的架构通过冗余服务实现高可用性。 Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高…

C++的缺省参数和函数重载

目录 1.缺省参数 1.1缺省参数的概念 1.2缺省参数的分类 1.3缺省参数使用场景 2.函数重载 2.1函数重载的概念 2.2构成函数重载 1.缺省参数 1.1缺省参数的概念 概念&#xff1a;缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没…

GPTs保姆级教程之实践

GPTs什么 使用GPTs的前提&#xff1a;ChatGPT Plus帐号 GTPs的作用&#xff1a;把我们和GPT对话的prompt&#xff0c;封装起来成为一个“黑匣子”。 主要有两个作用&#xff1a; 1、避免反复输入prompt&#xff0c;“黑匣子”打开&#xff0c;输入问题即可使用 2、在别人可以…

pycharm deployment 灰色 一直无法点击

我的development的配置如下&#xff0c;我看了很多教程一直不知道为什么一直是灰色的&#xff0c; 文件夹配置&#xff1a; 如果你这里 Autodect&#xff0c;那么你Mapping 的文件夹应该是应该省略这个前缀的&#xff0c;例如我下面&#xff0c;我应该将本地文件夹映射到/home…

项目经理怎么处理客户提出的不合理请求?

一、客户不合理请求的定义和特点 客户不合理请求是指客户在项目执行过程中提出的与项目需求、合同约定或者实际情况不符的要求&#xff0c;通常表现为追加要求、频繁的变更、过度的要求等。这些请求可能会导致项目范围膨胀、成本增加、工期延长、甚至影响项目进度和质量。客户…

(29)最小偶倍数

文章目录 每日一言题目解题思路代码结语 每日一言 读书时&#xff0c;我愿在每一个美好思想的面前停留&#xff0c;就像在每一条真理面前停留一样。——爱默生 题目 题目链接&#xff1a;最小偶倍数 给你一个正整数 n &#xff0c;返回 2 和 n 的最小公倍数&#xff08;正整…

C#中的访问权限

在C#中&#xff0c;访问权限用于控制类、成员和其他程序实体的可访问性。C#提供了一些关键字来定义不同级别的访问权限&#xff0c;以确保适当的封装和信息隐藏。 以下是C#中的四个访问权限级别&#xff0c;按照从最高到最低的顺序排列&#xff1a; private&#xff1a;私有访…

【HTML】MDN

文章目录 一、html元素1.1 <a>1.2 <abbr>1.3 <address>1.4<area>1.5 <article>1.6 <aside>1.7 <audio>1.8 <b>1.9 <base>1.10<bdi>1.11 <bdo>1.12 <blockquote>1.13 <body>1.14 <br>1.15…

人工智能(pytorch)搭建模型24-SKAttention注意力机制模型的搭建与应用场景

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型24-SKAttention注意力机制模型的搭建与应用场景&#xff0c;本文将介绍关于SKAttention注意力机制模型的搭建&#xff0c;SKAttention机制具有灵活性和通用性&#xff0c;可应用于计算机视…

Makefile 和 Bash 脚本之间区别和联系

目 录 一、Makefile 和 Bash 脚本的定义 &#xff08;一&#xff09;Bash 脚本 &#xff08;二&#xff09;Makefile 二、Makefile 和 Bash 脚本的相同之处 三、Makefile 和 Bash 脚本的不同点 &#xff08;一&#xff09;目的 &#xff08;二&a…