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

news2024/11/15 14:22:17

文章目录

      • 背包问题题型
      • 1049. 最后一块石头的重量 II
      • 494. 目标和
      • 474.一和零

背包问题题型

  • 等和子集 —0-1背包能否装满
  • 最后一块石头—0-1背包尽量装满
  • 目标和—0-1背包装满,且有多少种装的方式(组合问题)

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

  • 题目链接:代码随想录

  • 解题思路:

    本题是尽量凑成重量相同的两堆,然后进行碰撞

public int lastStoneWeightII(int[] stones) {
    //定义dp数组,dp数组是重量的背包
    //dp[i]表示重量为i的背包能放下最大容量的石头
    int[] dp = new int[1501];

    //sum[i]既表示重量也表示价值
    int sum = 0;
    for (int stone : stones) {
        sum += stone;
    }

    int target = sum / 2;

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

    //和上一题处理唯一不同的地方
    //半和target最多能装满的的价值
    //(sum - dp[target])表示剩下的价值,一定比dp[target]大,因为target向下取整
    return (sum - dp[target]) - dp[target];
}

494. 目标和

  • 题目链接:代码随想录

组合类问题的0-1背包问题都是dp[j] += dp[j - nums[i]]

  • 解题思路:
    1.dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法
    2.dp[j] += dp[j - nums[i]]
    3.初始化: dp[0] 为 1
    4.遍历顺序:从后向前遍历

  • 图像理解:

    1.left部分和的推导

    QQ图片20230426212841

    2.递归公式的推导

    image-20230426213005098

    3.过程

    Snipaste_2023-04-26_21-16-13

public int findTargetSumWays(int[] nums, int target) {
    int sum = 0;
    for (int i = 0; i < nums.length; i++) sum += nums[i];

    //防止target目标过大
    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];
}

474.一和零

  • 题目链接[代码随想录]

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

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

相关文章

网页爬虫之WebPack模块化解密(JS逆向)

WebPack打包: webpack是一个基于模块化的打包&#xff08;构建&#xff09;工具, 它把一切都视作模块。 概念&#xff1a; webpack是 JavaScript 应用程序的模块打包器,可以把开发中的所有资源&#xff08;图片、js文件、css文件等&#xff09;都看成模块&#xff0c;通过loade…

Java中Lambda表达式(面向初学者)

目录 一、Lambda表达式是什么&#xff1f;什么场景下使用Lambda&#xff1f; 1.Lambda 表达式是什么 2.函数式接口是什么 第二章、怎么用Lambda 1.必须有一个函数式接口 2.省略规则 3.Lambda经常用来和匿名内部类比较 第三章、具体使用场景举例&#xff08;&#xff09; …

水果店(库)管理系统 —— 实现了管理员模式与顾客模式 JAVA

水果店&#xff08;库&#xff09;管理系统 1.前言&#xff1a;2.功能简介及部分测试视频&#xff1a;3.本管理系统的构建原理&#xff08;简介)&#xff1a;(1).如何跳转页面&#xff1a;(2).如何让控制台能输出彩色字体&#xff1a;(3).如何稳定存储数据&#xff1a;(4).如何…

误操作清空了回收站文件如何找到文件

我们在删除文件的时候&#xff0c;文件都是先跑到回收站里的&#xff0c;这样的防止我们出现误删的情况&#xff0c;但往往也会出现我们要恢复删除的文件却误操作清空了回收站的情况&#xff0c;那么误操作清空了回收站如何找到呢&#xff0c;下面小编给大家分享误操作清空了回…

window 10 安装node.js时遇到2502 2503错误(已解决)

node安装失败2503的解决办法&#xff1a;1、在WIN搜索框搜索powershell并右击&#xff1b;2、点击使用管理员身份运行powershell命令行工具&#xff1b;3、输入“msiexec /package node”&#xff1b;4、打开安装包&#xff0c;根据提示安装即可。 本文操作环境&#xff1a;Win…

9.Join的应用

1.reduceJoin的应用 案例&#xff1a;将两个表合并成一个新的表 需求分析&#xff1a;通过将关联条件作为Map输出的key&#xff08;此处指pid&#xff09;&#xff0c;将两表满足Join条件的数据并携带数据所来源的文件信息&#xff0c;发往同一个ReduceTask&#xff0c;在Redu…

汇编小程序解析--3D立方体旋转

汇编小程序解析–3D立方体旋转&#xff0c;源代码如下&#xff0c;是vulture大神于1995年写的&#xff0c;我到现在才基本看懂。 ;本程序由国外的Vulture大哥编写&#xff0c;并公布了源码&#xff0c;这个是他95年的一个作品&#xff0c;可以说是在当时是非常成功的&#xff…

论shell之条件语句-if语句、case语句

目录 一&#xff1a;条件测试 1.文件测试 2.常见的测试操作符 3.整数值比较 ​4.字符串比较 ​5. 逻辑测试 二&#xff1a;if语句 1.单分支结构 2.单分支结构实例 3.双分支结构 4.双分支结构实例 5.多分支结构 6.多分支机构实例 7.嵌套if语句实例 三&#xff1a;case语…

2023企业服务的关键词:做强平台底座

作者 | 曾响铃 文 | 响铃说 4月下旬&#xff0c;软件行业相关的大会紧锣密鼓地开了好几场&#xff0c;不仅有政府主办的2023中国国际软件发展大会、中国软件创新发展大会&#xff0c;也有用友、浪潮等服务商举办的品牌活动&#xff0c;让软件业的话题一直保持热度。 以用友为…

十大排序算法简单总结与对比

假设排序均从小到大排序 排序算法工作原理平均时间复杂度最坏时间复杂度空间复杂度是否稳定排序冒泡排序把相邻元素两两比较&#xff0c;若左侧的元素大于右侧的元素&#xff0c;则交换&#xff0c;否则不交换。&#xff08;每一轮最大的会跑到最右边&#xff09;O(&#xff0…

VGA协议实践

文章目录 前言一、VGA接口定义与传输原理1、VGA接口定义2、传输原理3、不同分辨率对应不同参数 二、Verilog编程1、VGA显示彩色条纹2、VGA显示字符3、输出一幅彩色图像4、Quartus操作1、添加PLL核2、添加ROM核 三、全部代码四、总结五、参考资料 前言 VGA的全称是Video Graphi…

VBA最基础的趣味速成练习--VBA资料

很多朋友想学VBA&#xff0c;但是苦于无处入手&#xff0c;我特意花了几天时间&#xff0c;做了一个VBA速成练习表格 能让你快速上手VBA&#xff0c;感受到VBA的神奇之处&#xff0c;相信我们日常使用表格的朋友会非常喜欢它的&#xff0c; 下面是我们的表格界面&#xff0c;…

选择营销自动化软件时的3个常见错误

做出投资营销自动化软件的决定是一个重大决定&#xff0c;可能很难知道从哪里开始&#xff0c;尤其是当市场上有这么多选择时。选择正确的自动化软件可能是拥有良好的营销运营与拥有低效营销团队之间的区别。在这篇博文中&#xff0c;我们将讨论人们在选择营销自动化软件时最常…

Flink之TaskManager内存解析

一、CK失败 Flink任务的checkpoint操作失败大致分为两种情况&#xff0c;ck decline和ck expire: &#xff08;1&#xff09;ck decline 发生ck decline情况时&#xff0c;我们可以通过查看JobManager.log或TaskManager.log查明具体原因。其中有一种特殊情况为ck cancel&…

排序 - 选择排序(Selection sort)

文章目录 选择排序介绍选择排序实现选择排序的时间复杂度和稳定性选择排序时间复杂度选择排序稳定性 代码实现核心&总结 每日一道算法&#xff0c;提高脑力。第四天&#xff0c;选择排序。 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素&#…

Shiro详解(超全面)

目录: 一、简介二、Shiro的整体架构1、Subject2、Security Manager3、Cryptography4、Authenticator5、Authorizer6、realm7、sessionManager8、SessionDAO9、CacheManager 三、入门案例四、认证流程1、认证流程2、常见异常 五、授权流程1、授权流程2、自定义realm实现授权 六、…

JavaScript日期库之date-fn.js

用官网的话来说&#xff0c;date-fn.js 就是一个现代 JavaScript 日期实用程序库&#xff0c;date-fns 为在浏览器和 Node.js 中操作 JavaScript 日期提供了最全面、但最简单和一致的工具集。那实际用起来像它说的那么神奇呢&#xff0c;下面就一起来看看吧。 安装 安装的话就…

深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

前言 pytorch中的动态图机制是pytorch这门框架的优势所在&#xff0c;阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解&#xff0c;同时在博客的后半部分有关于逻辑回归的知识点&#xff0c;并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 …

Springboot 自动装配流程分析

目录 1.基础知识&#xff1a; 2.具体代码执行流程 3.流程总结&#xff1a; 4.参考文章&#xff1a; 1.基础知识&#xff1a; springboot的自动装配是利用了spring IOC容器创建过程中的增强功能&#xff0c;即BeanFactoryPostProcessor&#xff0c; 其中的ConfigurationCla…

【JavaEE】SpringBoot的日志

目录 日志作用 SpringBoot日志框架 日志打印 日志级别 类型 作用 修改级别 日志永久化 配置日志文件目录 配置日志文件名 简化日志打印和永久化——lombok 日志作用 问题定位&#xff1a;可以帮助开发人员快速找到问题出现的位置系统监控&#xff1a;可以把系统的运…