java算法day43 | 动态规划part05 ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

news2025/7/3 19:31:13

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

在这里插入图片描述
在这里插入图片描述
核心思想: 尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。
是不是感觉和昨天讲解的416. 分割等和子集 (opens new window)非常像了。那么分成两堆石头,一堆石头的总重量是dp[target],另一堆就是sum - dp[target]。

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];//1、定义dp数组 3、第一列初始化为0
        for(int i=0;i<stones.length;i++){
            for(int j=target;j>=stones[i];j--){//4、遍历顺序
                dp[j]=Math.max(dp[j],dp[j-stones[i]]+stones[i]);//2.递推公式
            }
        }
        return sum-dp[target]-dp[target];//最终的返回结果


    }
}

时间复杂度:O(m × n) , m是石头总重量(准确的说是总重量的一半),n为石头块数
空间复杂度:O(m)

494. 目标和

在这里插入图片描述
在这里插入图片描述

思路: 这道题的dp数组的含义变了。具体看代码随想录的讲解

class Solution {
    public int findTargetSumWays(int[] nums, int target) {
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
        }
        //如果不能满足(target+sum)/2为整数的条件或target的绝对值大于sum的绝对值,直接返回0
        if((target+sum)%2!=0 || Math.abs(target)>Math.abs(sum)) return 0;
        int size=(target+sum)/2;
        int[] dp=new int[size+1];//1、定义dp数组,表示j容量时的表达式数目
        dp[0]=1;//3、初始化
        for(int i=0;i<nums.length;i++){
            for(int j=size;j>=nums[i];j--){//4、因为是01背包,所以反向遍历
                dp[j]=dp[j]+dp[j-nums[i]];//2、递推公式
            }
        }
        return dp[size];
    }
}

时间复杂度:O(n × m),n为正数个数,m为背包容量
空间复杂度:O(m),m为背包容量

474.一和零

在这里插入图片描述
思路: 这道题是一个二维的背包问题,和普通的背包相比只需要多一层对容量的循环。
在这里插入图片描述

class Solution {
    public int findMaxForm(String[] strs, int m, int n) {
        int[][] dp=new int[m+1][n+1];//1、定义dp数组,表示当0的容量为x,1的容量为n时,最大子集的长度
        for(int i=0;i<strs.length;i++){//4、遍历顺序,物品正序遍历
            int weightm=0;
            int weightn=0;
            for(int j=0;j<strs[i].length();j++){
                if(strs[i].charAt(j)=='0') weightm++; 
                else weightn++;
                }
            
            for(int x=m;x>=weightm;x--){//4、物品的空间占用逆序遍历
                for(int y=n;y>=weightn;y--){
                    dp[x][y]=Math.max(dp[x][y],dp[x-weightm][y-weightn]+1);//2、递推公式,注意value是1
                }
            }
        }
        return dp[m][n];
    }
}

时间复杂度: O(kmn),k 为strs的长度
空间复杂度: O(mn)

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

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

相关文章

LeetCode十一题:容纳最多水的容器【11/1000 python】

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

基于SpringBoot的“数码论坛系统设计与实现”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“数码论坛系统设计与实现”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统首页界面图 数码板…

提升提测质量之研测共建

提升提测质量之研测共建 简介 你是否也有同样的困惑&#xff1f;跟进的需求&#xff0c;就在提测前一秒&#xff0c;被告知不能如期提测了&#xff0c;研测计划被打乱&#xff1b;提测的功能&#xff0c;犹如遇到不好的购物体验&#xff0c;缺斤短两&#xff0c;与prd预期不符…

09 flink-sql 中基于 mysql-cdc 的 select * from test_user 的具体实现

前言 这也是最近帮一个朋友看问题 遇到的一个问题 然后 引发了一下 对于 flink-sql 里面的一些 常规处理的思考, 理解 原始问题主要是 在测试库可以使用 flink-sql 可以正常同步, 但是 在生产环境 无法正常同步数据 这个问题 我们后面单独 记录一篇文章 测试用例 下载…

C++算法 —— 前缀和

一、【模版】前缀和 1.链接 【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 2.描述 3.思路 前缀和的思想其实就是一种简单的动态规划&#xff0c;以i位置记录从头位置到i位置的和&#xff0c;然后间接的求一段连续区间的数组和&#xff0c;时间复杂度是O&#xff08;n&…

20.2k stars项目搭建私人网盘界面美功能全

Nextcloud是一套用于创建网络硬盘的客户端&#xff0d;服务器软件。其功能与Dropbox相近&#xff0c;但Nextcloud是自由及开放源代码软件&#xff0c;每个人都可以在私人服务器上安装并执行它。 GitHub数据 20.2k stars561 watching3.2k forks 开源地址:https://github.com/ne…

保研线性代数复习3

一.基底&#xff08;Basis&#xff09; 1.什么是生成集&#xff08;Generating Set&#xff09;&#xff1f;什么是张成空间&#xff08;Span&#xff09;&#xff1f; 存在向量空间V(V&#xff0c;&#xff0c;*)&#xff0c;和向量集&#xff08;xi是所说的列向量&#xff…

H5面临的网络安全威胁和防范措施

H5&#xff0c;是基于HTML5技术的网页文件。HTML&#xff0c;全称Hyper Text Markup Language&#xff0c;即超文本标记语言&#xff0c;由Web的发明者Tim Berners-Lee与同事Daniel W. Connolly共同创立。作为SGML的一种应用&#xff0c;HTML编写的超文本文档能够独立于各种操作…

《机器学习算法面试宝典》正式发布!

大家好&#xff0c;历时半年的梳理和修改&#xff0c;《机器学习算法面试宝典》&#xff08;以下简称《算法面试宝典》&#xff09;终于可以跟大家见面了。 近年来&#xff0c;很多理科专业学生也纷纷转入算法赛道&#xff0c;特别是最近 ChatGPT 的爆火&#xff0c;推动了AI …

服务器硬件构成与性能要点:CPU、内存、硬盘、RAID、网络接口卡等关键组件的基础知识总结

文章目录 服务器硬件基础知识1. CPU&#xff08;中央处理器&#xff09;2. 内存&#xff08;RAM&#xff09;3. 硬盘4. RAID&#xff08;磁盘阵列&#xff09;5. 网络接口卡&#xff08;NIC&#xff09;6. 电源7. 散热器8. 主板9. 显卡10. 光驱 服务器硬件基础知识 服务器是一…

JDK类加载器剖析

0.前言 我之所以深入研究 Java 类加载器&#xff0c;是为了解决一个奇怪的问题。流行出版物&#xff0c;也就是人们所认为的 Java 世界的灯塔&#xff0c;充斥着关于这个主题的相互矛盾和过时的信息。这种矛盾引发了我的调查 — — 在 Java 类加载器的迷宫中寻求清晰的答案。 …

Oracle 数据库中的全文搜索

Oracle 数据库中的全文搜索 0. 引言1. 整体流程2. 创建索引2-1. 创建一个简单的表2-2. 创建文本索引2-3. 查看创建的基础表 3. 运行查询3-1. 运行文本查询3-2. CONTAINS 运算符3-3. 混合查询3-4. OR 查询3-5. 通配符3-6. 短语搜索3-7. 模糊搜索&#xff08;Fuzzy searches&…

【Servlet】Servlet入门

文章目录 一、介绍二、入门案例导入servlet-api的解决办法 一、介绍 概念&#xff1a;server applet&#xff0c;即&#xff1a;运行在服务器端的小程序 Servlet就是一个接口&#xff0c;定义了Java类被浏览器访问到&#xff08;tomcat识别&#xff09;的规则。 将来我们定义…

java数据结构与算法刷题-----LeetCode504. 七进制数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 倒退迭代&#xff08;除基取余法&#xff09;2. 省略掉反转操…

【JavaEE初阶系列】——文件操作 IO 之 文件系统操作

目录 &#x1f4dd;认识文件 &#x1f6a9;树型结构组织 和 目录 &#x1f388;绝对路径和相对路径 &#x1f6a9;文件类型 &#x1f4dd;文件系统操作 &#x1f388;File 概述 &#x1f388;File类的使用 1. 绝对路径 vs 相对路径 2. 路径分隔符 3. 静态成员变量 4…

小明记账簿-记账工具

今天不了技术&#xff0c;聊一下工具&#xff0c;最近耗费无数个日日夜夜&#xff0c;做了一个记账小程序&#xff0c;感觉很实用&#xff0c;简单方便&#xff0c;希望帮助那些需要帮助的人。 想轻松管理个人财务吗&#xff1f;试试小明记账簿吧&#xff01;它是一款便捷&…

篮桥杯刷题第n天(dp更新)

最长上升子序列 输入&#xff1a; 10 1 4 5 1 4 1 9 1 9 输出&#xff1a; 4 算法思想&#xff1a;记录每个数为结尾的最长子序列长度&#xff0c;作为dp数组。 eg&#xff1a;&#xff08;这个是以每个位置开头的记录最长的来穷举但核心仍为上述的算法思想&#xff09; …

vue快速入门(一)vue的导入方法

注释很详细&#xff0c;直接上代码 新增内容 下载js代码导入实例数据绑定显示 源码 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

【解读Kubernetes架构】全面指南,带你掌握Kubernetes的设计原理与构成!

了解 Kubernetes 架构&#xff1a;综合指南 前言一、什么是 Kubernetes 架构&#xff1f;1.1、控制平面1.2、工作节点 二、Kubernetes 控制平面组件2.1、kube-api服务器2.2、etcd2.3、kube-scheduler2.4、Kube 控制器管理器2.5、云控制器管理器 &#xff08;CCM&#xff09; 三…

【HarmonyOS】ArkUI - 动画

利用属性动画、显示动画、组件转场动画实现组件动画效果。 一、属性动画 属性动画是通过设置组件的 animation 属性来给组件添加动画&#xff0c;当组件的 width、height、Opacity、backgroundColor、scale、rotate、translate 等属性变更时&#xff0c;可以实现渐变过渡效果。…