力扣动态规划基础版(斐波那契类型)
70. 爬楼梯
https://leetcode.cn/problems/climbing-stairs/
70.爬楼梯
方法一 动态规划
考虑转移方程和边界条件:
f(x) = f(x -1) + f(x - 2);f(1) = 1;f(2) = 2;
class Solution {public int climbStairs(int n) {//到第一阶的方法int p = 1;//到第二阶的方法int q = 2;if(n == 1){return p;}else if(n ==2){return q;}else{int r = 3;for(int i = 3; i <= n; i++){r = q + p;p = q;q = r;}return r;}}
}
时间复杂度为O(n)
方法二 矩阵快速幂
需要构造一下 ,对于齐次线性传递

class Solution {public int climbStairs(int n) {int [][] q= {{1,1},{1,0}};int[][] res = pow(n,q);return res[0][0];}//做一个矩阵的乘方public int[][] pow(int n,int[][] a){//做一个单位矩阵int[][] ret = {{1,0},{0,1}};while(n > 0){//用到一个位运算if((n & 1) == 1){ret = multiply(ret,a);}n >>= 1;a = multiply(a,a);}return ret;}//根据构造的矩阵定义public int[][] multiply(int a[][],int b[][]){int c[][] = new int[2][2];for(int i = 0; i < 2; i++){for(int j = 0;j < 2;j++){c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j];}}return c;}
}
关于为什么第一个元素就是结果:

这里如果麻烦一点的话,假如这个初始向量不是1,1那你可以先用这个操作,然后最后×初始向量,但是要重新定义一个函数就是1*2的矩阵和2*2的矩阵相乘的方法
509.斐波那契数
509. 斐波那契数
https://leetcode.cn/problems/fibonacci-number/
方法一 动态规划
和爬楼梯的转移条件都是一模一样的
class Solution {public int fib(int n) {int p = 0,q = 1,r = 0;if(n < 2){return n;}else{for(int i = 2; i <= n; i++){r = p + q;p = q;q = r;}return r;}}
}
方法二 矩阵快速幂
和爬楼梯唯一的不同点就是主函数要用n -1
class Solution {public int fib(int n) {if (n < 2) {return n;}int r[][] = {{1,1},{1,0}};int res[][] = pow(n - 1,r);return res[0][0];}public int[][] pow(int n ,int[][] c){int [][]r = {{1,0},{0,1}};while(n > 0){if((n & 1) == 1){r = mul(r,c);}n >>= 1;c = mul(c,c);}return r;}public int[][] mul(int a[][],int b[][]){int r[][] = new int[2][2];for(int i = 0; i < 2; i++){for(int j = 0;j < 2; j++){r[i][j] = a[i][0] * b[0][j] + a[i][1]*b[1][j];}}return r;}}
1137.第N个泰伯那契数
1137. 第 N 个泰波那契数
https://leetcode.cn/problems/n-th-tribonacci-number/
方法一 动态规划
class Solution {public int tribonacci(int n) {int p = 0,q = 1,r = 1;if(n == 0){return 0;}else if(n == 1){return 1; }else if(n == 2){return 1;}else{for(int i = 3; i <= n; i++){int m = p + q + r;p = q;q = r;r = m;}return r;}}
}
class Solution {public int tribonacci(int n) {int p = 0,q = 1,r = 1;if(n == 0){return 0;}else if(n == 1){return 1; }else if(n == 2){return 1;}else{for(int i = 3; i <= n; i++){int m = p + q + r;p = q;q = r;r = m;}return r;}}
}
746.使用最小花费爬楼梯
746. 使用最小花费爬楼梯
https://leetcode.cn/problems/min-cost-climbing-stairs/分析一手核心问题还是找到这个状态转移方程
dp[i] = Math.min(dp[i -1] + cost[i -1], dp[i -2] + cost[i -2]);
class Solution {public int minCostClimbingStairs(int[] cost) {int n = cost.length;int[] dp = new int[n + 1];dp[0] = dp[1] = 0;for(int i = 2;i <= n;++i){dp[i] = Math.min(dp[i -1] + cost[i -1], dp[i -2] + cost[i -2]);}return dp[n];}
}
时间:O(n) 空间O(n),可以发现第i项只和i -1 和i -2相关,所以可以用一个滚轮降低空间复杂度
class Solution {public int minCostClimbingStairs(int[] cost) {int n = cost.length;int[] dp = new int[n + 1];int pre = 0; int cur = 0;for(int i = 2;i <= n;++i){int nex = Math.min(cur + cost[i - 1],pre + cost[i - 2]);pre = cur;cur = nex;}return cur;}
}
这样的话空间复杂度就是O(1)了
198.打家劫舍
198. 打家劫舍
https://leetcode.cn/problems/house-robber/核心还是去找边界条件和这个状态转移方程,这个题目状态转移方程没以前那么好想两种假设:
1.偷窃第k间房屋,就不能偷窃第k - 1间房屋,偷窃总金额为前 k−2 间房屋的最高总金额与第 k 间房屋的金额之和。
2.不偷窃第 k 间房屋,偷窃总金额为前 k−1 间房屋的最高总金额。
边界条件:dp[0]的话就是nums【0】,dp【1】的话就是两个最大的、
状态转移方程:
dp[i] = Math.max(dp[i - 1],dp[i - 2] + nums[i]);
class Solution {public int rob(int[] nums) {if(nums == null){return 0;}int length = nums.length;if(length == 1){return nums[0];}int[] dp = new int[length];dp[0] = nums[0];dp[1] = Math.max(nums[0],nums[1]);for(int i = 2; i < length; i++){dp[i] = Math.max(dp[i - 1],dp[i - 2] + nums[i]);}return dp[length -1];}
}
模仿上一道题,这个题也能变成轮询的问题,降低空间复杂度
class Solution {public int rob(int[] nums) {if(nums == null){return 0;}int length = nums.length;if(length == 1){return nums[0];}if(length == 2){return Math.max(nums[0],nums[1]);}int pre = nums[0];int cur = Math.max(nums[0],nums[1]);for(int i = 2; i < length; i++){int nex = Math.max(cur,pre + nums[i]);pre = cur;cur = nex;}return cur;}
}
740.删除并获得点数
740. 删除并获得点数
https://leetcode.cn/problems/delete-and-earn/题目有一点晦涩难懂,看了题解以后恍然大悟,发现就是一个乱序的打家劫舍哈哈哈,需要找出这个最大值,做一个数组,再用打家劫舍的函数就解决了,这个第一次做有点难想到动态规划
class Solution {public int deleteAndEarn(int[] nums) {int Maxval = 0;for(int val : nums){Maxval = Math.max(val,Maxval);}int [] sums = new int[Maxval + 1];//for(int val : nums){sums[val] += val;}return rob(sums);}
//纯打家劫舍public int rob(int[] nums){int n = nums.length;int dp[] = new int[n];dp[0] = nums[0];dp[1] = Math.max(nums[0],nums[1]);for(int i = 2; i < n; ++i){dp[i] = Math.max(dp[i - 1],dp[i - 2] + nums[i]);}return dp[n - 1];}
}
相关文章:
力扣动态规划基础版(斐波那契类型)
70. 爬楼梯https://leetcode.cn/problems/climbing-stairs/ 70.爬楼梯 方法一 动态规划 考虑转移方程和边界条件: f(x) f(x -1) f(x - 2);f(1) 1;f&…...
Java重修笔记 InetAddress 类和 Socket 类
InetAddress 类相关方法 1. 获取本机 InetAddress 对象:getLocalHost public static InetAddress getLocalHost() throws UnknownHostException 返回值:本地主机的名字和地址 异常:UnknownHostException - 如果本地主机名无法解析成地址 2…...
秋招突击——8/6——万得数据面试总结
文章目录 引言正文面经整理一1、讲一下java的多态,重载,重写的概念,区别2、说一下Java的数组,链表的结构,优缺点3、创建java线程的方式有哪些,具体说说4、创建线程池呢、每个参数的意义5、通过那几种方式保…...
STM32定时器
目录 STM32定时器概述 STM32基本定时器 基本定时器的功能 STM32基本定时器的寄存器 STM32通用定时器 STM32定时器HAL库函数 STM32定时器概述 从本质上讲定时器就是“数字电路”课程中学过的计数器(Counter),它像“闹钟”一样忠实地为处…...
第七课 Vue中的v-for遍历指令
Vue中的v-for遍历指令 v-for用于对象遍历(数组/JSON),渲染数据列表 基础示例: <div id"app"><ul><li v-for"val in arr">{{val}}</li></ul></div><script>new V…...
【NTN 卫星通信】卫星通信的专利
1 概述 好久没有看书了,最近买了本讲低轨卫星专利的书,也可以说是一个分析报告。推荐给喜欢的朋友。 2 书籍截图 图1 封面 图2 波音低轨卫星专利演进 图3 低轨卫星关键技术专利发展阶段 图4 第一页 3 参考文献 产业专利分析报告–低轨卫星通信技术...
vue3 element table 插槽外的数据更新,插槽内的数据未更新。
在使用element table组件时候,有时候需要对table内部的header插槽进行单独的列的数据操作,比如在列头增加一个筛选功能,对指定范围的值进行一个筛选,需要对input的值进行v-model的绑定,对绑定的值进行清空时候…...
飞凌嵌入式FET527N-C核心板已适配OpenHarmony4.1
近期,飞凌嵌入式为FET527N-C核心板适配了OpenHarmony4.1系统——进一步提升了核心板的兼容性、稳定性和安全性。 OpenHarmony4.1在应用开发方面展现了全新的开放能力,以更加清晰的逻辑和场景化视角提供给开发者丰富的API接口,应用开发能力得…...
CVPR 2024最佳论文候选-pixelSplat论文解读
目录 一、概述 二、相关工作 1、单场景下的视角合成 2、基于先验的三维重建和视图合成 3、多视图几何测量 三、3DGS的缺点 1、容易陷入最小值 2、需要大量输入图像 3、尺度模糊性 四、pixelSplat 1、解决尺度模糊性(深度信息生成) 2、编码器…...
在Android中如何切割一张图片中的不规则“消息体/图片/表情包等等”?
在Android应用中,判断一张图片中“消息体”的大小,可以通过图像处理技术来实现。主要的步骤包括:将图像转换为灰度图,进行二值化处理,接着使用轮廓检测或边缘检测来识别消息体的边界,最后计算消息体的大小。…...
Jenkins+Ant+Jmeter接口自动化集成测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Jenkins安装配置 1、安装配置JDK1.6环境变量; 2、下载jenkins.war,放入C:\jenkins目录下,目录位置随意; J…...
JavaSE——集合4:List接口实现类—LinkedList
目录 一、LinkedList的全面说明 二、LinkedList的底层操作机制 (一)LinkedList添加结点源码 (二)LinkedList删除结点源码 三、LinkedList常用方法 四、ArrayList与LinkedList的选择 一、LinkedList的全面说明 LinkedList底层实现了双向链表和双端队列的特点可以添加任意…...
FPGA图像处理之三行缓存
文章目录 一、前言二、FPGA实现三行缓存的架构三、Verilog代码实现四、仿真验证五、输入图像数据进行仿真验证 一、前言 在 FPGA 做图像处理时,行缓存是一个非常重要的一个步骤,因为图像输入还有输出都是一行一行进行的,即处理完一行后再处理…...
10月15日,每日信息差
第一、《哈利・波特与魔法石》在中国内地总票房突破 3 亿元,包括 2002 年首映的 5600 万,2020 年重映的 1.923 亿,以及 2024 年重映的 5170 万。 第二、全国铁路实施新货物列车运行图,增开城际班列至 131 列,多式联运…...
4G、5G通信中,“网络侧“含义
在5G通信中,"网络侧"这个术语可以指代不同的网络元素,具体取决于上下文。通常,网络侧可以包括以下两个主要部分: 基站(gNB): 基站是无线接入网(RAN)的一部分&a…...
spring boot核心理解-各种starter
理解 Spring Boot 的 Starter 机制以及如何选择和使用各种 starter,是开发 Spring Boot 应用的重要一环。Spring Boot Starter 是一组方便的依赖组合,用于简化 Spring 项目中的依赖管理。它们可以帮助开发者快速引入所需的库和自动配置,从而加…...
解决海外社媒风控问题的工具——云手机
随着中国企业逐步进入海外市场,海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下,云手机作为一种新型技术解决方案,正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控,企业经常面临账号流…...
全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版
软件简介 PDF Shaper是一款功能强大的PDF工具集,它提供了一系列用于处理PDF文档的工具。这款软件使用户能够轻松地转换、分割、合并、提取页面以及旋转和加密PDF文件。PDF Shaper的界面简洁直观,使得即使是新手用户也能快速上手。它支持广泛的功能&…...
Maven入门
Maven Maven Wrapper 版本一致性: Maven Wrapper 允许你在项目中指定一个特定的 Maven 版本。这意味着所有开发人员和 CI/CD 环境都将使用相同版本的 Maven,从而避免由于版本不一致导致的问题。 简化设置: 新开发者克隆项目时,…...
Chromium 中window.DOMParser接口说明c++
一、DOMParser DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。 备注: XMLHttpRequest 支持从 URL 可寻址资源解析 XML 和 HTML,在其response 属性中返回Document。 你可以使用XMLSerializer 接口执行相反的操作 - 将…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
