力扣爆刷第129天之动态规划五连刷(完全平方数、单词拆分、打劫劫舍)

力扣爆刷第129天之动态规划五连刷(完全平方数、单词拆分、打劫劫舍)

文章目录

      • 力扣爆刷第129天之动态规划五连刷(完全平方数、单词拆分、打劫劫舍)
      • 一、279. 完全平方数
      • 二、139. 单词拆分
      • 三、198.打家劫舍
      • 四、213. 打家劫舍 II
      • 五、337. 打家劫舍 III

一、279. 完全平方数

题目链接:https://leetcode.cn/problems/perfect-squares/description/
思路:本题和最少零钱兑换是一样的,都是完全背包求最小数量,但是求的是用的物品的最小数量,这个物品不用区分组合还是排序,只要是最小数量就可以,所以完全背包,物品和背包谁内谁外都可以,不影响,定义dp[i]表示背包为N时装满所需的最小物品数量为dp[i]。
另外谨记:
如果求组合数就是外层for循环遍历物品,内层for遍历背包。

如果求排列数就是外层for遍历背包,内层for循环遍历物品。

class Solution {public int numSquares(int n) {int[] dp = new int[n+1];Arrays.fill(dp, Integer.MAX_VALUE);dp[0] = 0;for(int i = 1; i*i <= n; i++) {for(int j = i*i; j <= n; j++) {dp[j] = Math.min(dp[j], dp[j-i*i]+1);}}return dp[n];}
}

二、139. 单词拆分

题目链接:https://leetcode.cn/problems/word-break/description/
思路:单词拆分中的单词可以不限数量,问能否拼接为字符串,拼接是讲究顺序的,显然是完全背包求排列数,背包在外,物品在内。
递推公式:完全背包求组合数和排列数都是一个公式 dp[i] = dp[i-nums[j]]。

class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp = new boolean[s.length()+1];dp[0] = true;for(int i = 1; i < dp.length; i++) {for(String t : wordDict) {if(t.length() > i || dp[i] || !isTrue(s, t, i-t.length(), i)) continue;dp[i] = dp[i-t.length()];}}return dp[s.length()];}boolean isTrue(String s, String t, int x, int y) {int i = 0;while(x < y) {if(s.charAt(x) != t.charAt(i)) return false;x++;i++;}return true;}}

三、198.打家劫舍

题目链接:https://leetcode.cn/problems/house-robber/description/
思路:打家劫舍是一个经典问题,不能连续偷一家,所以对于每天有两种选择,即偷与不偷,偷的话,就依赖于前前家的结果,不偷的话,就依赖于前一天,故dp[i] = Math.max(dp[i-1], dp[i-2]+nums[i])。

class Solution {public int rob(int[] nums) {if(nums.length == 1) return nums[0];int a = nums[0], b = Math.max(a, nums[1]), c = 0;for(int i = 2; i < nums.length; i++) {c = Math.max(b, a + nums[i]);a = b;b = c;}return b;}
}

四、213. 打家劫舍 II

题目链接:https://leetcode.cn/problems/house-robber-ii/description/
思路:本题是一个变形,就是可以变成了一个环形数组,需要分情况考虑首尾问题,因为不能偷相邻的两家,所以,可以直接逻辑分割成两个数组,一个包含头[0, len-1],一个包含尾[1, len]。然后分别在两个区间上去求最大值。

class Solution {public int rob(int[] nums) {if(nums.length == 1) return nums[0];if(nums.length == 2) return Math.max(nums[0], nums[1]);int a = getMax(nums, 0, nums.length-2);int b = getMax(nums, 1, nums.length-1);return Math.max(a, b);}int getMax(int[] nums, int left, int right) {int a = nums[left], b = Math.max(a, nums[left+1]), c = 0;for(int i = left + 2; i <= right; i++) {c = Math.max(b, a + nums[i]);a = b;b = c;}return b;}
}

五、337. 打家劫舍 III

题目链接:https://leetcode.cn/problems/house-robber-iii/description/
思路:本题又是一个变体,虽然也是大家劫舍,但是变成了树的遍历了,也是要求不能同时偷一个家,那么对于每一个节点也是有两种选择,即偷与不偷,该节点偷的话,左右子节点就不能偷,该节点不偷的话,左右子节点偷与不偷都行记录最大值就可以。所以采用后序遍历,对于动态规划来说,无法就是状态与选择,把握住这个所有的动态规划都手拿把掐。

class Solution {public int rob(TreeNode root) {int[] dp = traverse(root);return Math.max(dp[0], dp[1]);}int[] traverse(TreeNode root) {if(root == null) {return new int[2];}int[] left = traverse(root.left);int[] right = traverse(root.right);int[] dp = new int[2];dp[0] = root.val + left[1] + right[1];dp[1] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);return dp;}}

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

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

相关文章

K8S - 各节点的kube-flannel-ds-amd64-xxxxx不能正常启动的问题

- kubectl get pods -A -o wide - 查看日志发现 - pods "kube-flannel-ds-amd64-xxxxx" is forbidden: User "system:serviceaccount:kube-system:flannel" cannot get resource "pods" in API group "" in the namespace "kube-…

深度学习之基于YOLOv5烟花燃放智能检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着科技的进步和人们对环保、安全意识的提高&#xff0c;传统的烟花燃放监管方式已逐渐不能满足现代…

Java图搜索算法详解:探索图论中的奥秘

图搜索算法是图论领域的重要内容&#xff0c;它在解决各种实际问题中起着关键作用。本文将详细介绍几种常见的Java图搜索算法&#xff0c;包括深度优先搜索&#xff08;DFS&#xff09;、广度优先搜索&#xff08;BFS&#xff09;以及Dijkstra算法&#xff0c;帮助读者深入理解…

RSA加密---java和node兼容版(可直接复制使用)

目录 背景 实现 一、node代码 1、引入依赖 2、生成公钥和私钥 3、生成工具类 二、java代码 背景 本来项目的后端是node&#xff0c;里面登录接口用的是后端生成RSA公钥和私钥&#xff0c;公钥给前端网页用来加密&#xff0c;node后端解密&#xff0c;一切很和谐&#x…

什么是MOM?为什么它是趋势

制造运营管理&#xff08;MOM&#xff09; 制造运营管理&#xff08;MOM&#xff09;旨在优化制造流程的效率和有效性。它涵盖制造执行、质量管理、生产计划和调度以及制造智能等功能。这种解决方案以全面的方式管理和增强制造流程。 MOM的功能特点 对于MOM的功能特点来说&…

Office Word自动编号转文本

原理 使用office自带的宏功能&#xff0c;一键替换 过程 调出word的“开发工具”选项 文件->选项->自定义功能区->选中开发工具->确定 创建宏 开发工具->宏->创建宏 编写宏 在弹出来的框里&#xff0c;替换代码为 Sub num2txt() ActiveDocument.…

前端请求没问题,后端正常运行,但查不出数据

写代码时写得快了些&#xff0c;Orders.的订单状态写错了CONFIRMED 改成COMPLETED

selenium 4.x 入门(环境搭建、八大元素定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium4.x环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型…

C++栈和队列模拟

栈和队列所用的容器默认都为deque&#xff0c;这种容器可以看作是一种vector和list的中间性能容器。 而deque虽然头插、尾插效率很好&#xff0c;且支持 [ ] 访问&#xff08;默认容器为它的原因&#xff09;&#xff0c;但是 他的缺点也很明显&#xff1a; 1.中间插入删除会…

Git中单独的功能特性分支是什么含义

在Git中&#xff0c;一个"功能特性分支"&#xff08;通常简称为“特性分支”&#xff09;是指从主开发分支&#xff08;比如main或master&#xff09;独立出来的分支&#xff0c;专门用于开发一个新功能、修复一个bug&#xff0c;或者进行实验性的尝试。使用特性分支…

git误操作版本回退的方法

场景&#xff1a;在使用git进行代码提交的时候不小心执行了git reset 命令进行了版本回退但是在这之前进行了git add . git commit -m "提交"等命令&#xff0c;正常情况下就可以直接使用 git reset 版本号 进行代码的回退&#xff0c;但是发现自己不能找打上一个提…

某985证书站挖掘记录

0x1.前言 本文章仅用于信息安全防御技术分享&#xff0c;因用于其他用途而产生不良后果&#xff0c;作者不承担任何法律责任&#xff0c;请严格遵循中华人民共和国相关法律法规&#xff0c;禁止做一切违法犯罪行为。文中涉及漏洞均以提交至教育漏洞平台&#xff0c;现已修复。 …

微服务之分布式理论zookeeper概述

一、分布式技术相关的理论 CAP理论 CAP定理(CAP theorem)&#xff0c;⼜被称作布鲁尔定理(Eric Brewer)&#xff0c;1998年第⼀次提出. 最初提出是指分布式数据存储不可能同时提供以下三种保证中的两种以上: (1) ⼀致性(Consistency): 每次读取收到的信息都是最新的; (2) …

Macs Fan Control Pro for mac激活版:macOS 平台的风扇控制软件

Macs Fan Control Pro是一款用于 macOS 平台的风扇控制软件&#xff0c;它允许用户监控和调整 Mac 电脑的风扇转速。以下是该软件的一些特点和功能&#xff1a; Macs Fan Control Pro for mac激活版下载 风扇监控&#xff1a;Macs Fan Control Pro 提供实时的风扇转速监控&…

uniapp关于iconfont字体图标使用

1、打开[阿里巴巴矢量图标库](https://www.iconfont.cn/)&#xff0c;选择需要的图标添加到购物车 2、点开购物车&#xff0c;将图标添加到项目 3、点开项目&#xff0c;点击下载至本地&#xff0c;会得到一个download.zip包 4、解压download包 5、将包里的iconfont.css和iconf…

Java从菜鸟到高手①

目录 1.数据类型 2.定义变量 2.1.编码方式 2.2.布尔型变量boolean 2.3.隐式类型转化和强制类型转化 2.4类型提升 3.字符串类型 4.运算符 4.1.取余 4.2. &#xff0c;- 4.3逻辑运算&& || &#xff01; 4.4.位运算 4.5.条件运算符 1.数据类型 Java中&#…

2024智能科学与软件工程国际学术会议(ICISSE 2024)

2024智能科学与软件工程国际学术会议&#xff08;ICISSE 2024) 会议简介 2024智能科学与软件工程国际学术会议&#xff08;ICISSE 2024&#xff09;将在北京隆重举行。本次会议汇集了全球智能科学和软件工程领域的专家学者&#xff0c;共同探讨该领域的最新研究成果和发展趋…

超详细的Vue脚手架

文章目录 Node.js介绍安装快速入门控制台输出使用函数模块化编程 npm包管理器介绍命令初始化命令本地安装(了解)全局安装(掌握)批量下载淘宝npm镜像(建议使用) Webpack介绍安装快速入门方式一&#xff1a;webpack原始方式方式二&#xff1a;基于NPM方式 webpack-dev-server 开发…

2024年第十五届蓝桥杯江苏省赛回顾

呜呜呜~~~ 我在考完了后感觉自己直接炸了&#xff1a;好多学到的算法都没有用上&#xff0c;几乎所有的题目都是暴力的。。。 最后十几分钟对于一道dp算法终于有思路了&#xff0c;但是。。匆匆忙忙之间就是没有调试出来。&#xff08;还是交了一道暴力[旋风狗头]直接哭死~~&…

设计模式学习笔记 - 开源实战五(下):总结Mybatis中用到的10种设计模式

概述 本章再对 Mybatis 用到的设计模式做一个总结。它用到的设计模式也不少。有些前面章节已经经过了&#xff0c;有些则比较简单。 SqlSessionFactoryBuilder&#xff1a;为什么要用建造者模式来创建 SqlSessionFactory&#xff1f; 在《Mybatis如何权衡易用性、性能和灵活性…