力扣:动态规划java

sub07 线性DP - O(1) 状态转移2_哔哩哔哩_bilibili

跳楼梯

class Solution {public int climbStairs(int n) {if (n <= 1) {return 1; // 处理边界情况}int[] dp = new int[n + 1]; // 创建长度为n+1的数组,比方说跳二级楼梯dp[0] = 1; // 初始值设定dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2]; // 状态转移方程}return dp[n]; // 返回结果}
}

跳两级楼梯,那么有零级,一级这两种,总共是三种,所以说最后的这个下标就是2,int[n+1]

判异,防止n<=1这种异常情况,去判空

爬楼的最少成本:LCR 088. 使用最小花费爬楼梯 - 力扣(LeetCode)

class Solution {public int minCostClimbingStairs(int[] cost) {int len = cost.length;int[] arr = new int[len+1];arr[0]=0;arr[1]=0;for(int i=2;i<=len;i++){arr[i]=min((arr[i-1])+cost[i-1],(arr[i-2]+cost[i-2]));}return arr[len];}public int min(int num1,int num2){return num1>num2? num2:num1;}
}

打家劫舍

LCR 089. 打家劫舍 - 力扣(LeetCode)

class Solution {public int rob(int[] nums) {int len = nums.length;int[] num= new int[len];num[0]=nums[0];for(int i=1;i<len;i++){if(i==1){num[i]=max(nums[0],nums[1]);}else{num[i]=max((num[i-2]+nums[i]),num[i-1]);}}return num[len-1];}public int max(int num1,int num2){return num1>num2?num1:num2;}
}

LCR 090. 打家劫舍 II - 力扣(LeetCode)

class Solution {public int rob(int[] nums) {int n = nums.length;if(n == 1){return nums[0];}else if(n == 2){return max(nums[0],nums[1]);}int[][] dp = new int[n][2];//第二个下标为0表示选择不选第一个数字dp[0][0]=0;dp[0][1]=nums[0];dp[1][0]=nums[1];dp[1][1]=nums[0];for(int i = 2;i<n;i++){for(int j =0;j<2;j++ ){if(j == 1 && i == n-1){dp[i][j]=dp[i-1][j];}else{dp[i][j]=max(dp[i-2][j]+nums[i],dp[i-1][j]);}}}return max(dp[n-1][0],dp[n-1][1]);}public int max(int a,int b){return a>b?a:b;}
}

91. 解码方法 - 力扣(LeetCode)

class Solution {public int numDecodings(String s) {int n = s.length();int[] dp = new int[n];for (int i = 0; i < n; i++) {if (i == 0) {//首先对初始值进行处理,如果说第1个数就是0,那么没有解码方法,
直接返回一个0if (s.charAt(i) == '0') {return 0;} else {//不然就返回一个1dp[i] = 1;}} else {//对于第二个数开始,下标为1的数字if (s.charAt(i) != '0') {//给它赋一个初值dp[i] = dp[i - 1];}//如果说它和前面一个数满足在10-26之间,首先前一个数等于1或者2,其次它的值要小于26if (s.charAt(i - 1) == '1' || s.charAt(i - 1) == '2') {//这是求映射的技巧int val = (s.charAt(i - 1) - '0') * 10 + (s.charAt(i) - '0');if (val <= 26) {if (i == 1) {dp[i]++;} else {dp[i] += dp[i - 2];}}}}}return dp[n - 1];}
}

1646. 获取生成数组中的最大值 - 力扣(LeetCode)

class Solution {public int getMaximumGenerated(int n) {int[] dp = new int[n + 1];//先定义一个长度为n+1的数组if (n == 0) {return 0;} else if (n == 1) {return 1;}dp[0] = 0;dp[1] = 1;int maxDp  =  dp[1];for(int i = 2;i<=n;i++){if(i%2 == 0){dp[i]=dp[i/2];}else{dp[i] = dp[(i-1)/2]+dp[(i-1)/2+1];}maxDp = max(dp[i],maxDp);}//不应该只是比较最后几个数return maxDp;}public int max(int a, int b) {return a > b ? a : b;}
}

1043. 分隔数组以得到最大和 - 力扣(LeetCode)

class Solution {public int maxSumAfterPartitioning(int[] arr, int k) {int len = arr.length;int[] dp = new int[len];for (int i = 0; i < len; i++) {int maxValue = 0;//因为这个maxValue要在下面这个循环中重复使用for (int j = i; j >= i - k + 1 && j >= 0; --j) {//取分组中的最大值maxValue = Math.max(arr[j], maxValue);if (j == 0) {dp[i] = Math.max(dp[i], +maxValue * (i - j + 1));} else {dp[i] = Math.max(dp[i], dp[j - 1] + maxValue * (i - j + 1));}}}return dp[len - 1];}
}

139. 单词拆分 - 力扣(LeetCode)


官方题解:

public class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> wordDictSet = new HashSet(wordDict);boolean[] dp = new boolean[s.length() + 1];dp[0] = true;for (int i = 1; i <= s.length(); i++) {for (int j = 0; j < i; j++) {if (dp[j] && wordDictSet.contains(s.substring(j, i))) {dp[i] = true;break;}}}return dp[s.length()];}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/word-break/solutions/302471/dan-ci-chai-fen-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上述相同,也是判断前j个是不是真,然后判断j-i,是不是真,真的话就跳出循环子循环

转化成Set的作用是提高查找效率

class Solution {public boolean wordBreak(String s, List<String> wordDict) {int len = s.length();Set<String> set = new HashSet(wordDict);boolean[] dp = new boolean[len];for (int i = 0; i < len; i++) {for (int j = i; j >= 0; j--) {if (j == 0) {if (set.contains(s.substring(j, i+1))) {dp[i] = true;break;}} else {if (dp[j-1] && set.contains(s.substring(j, i + 1))) {dp[i] = true;break;}}}}return dp[len - 1];}}

 substring用法substring[i,j),要选择第j到第i个的元素,用substring(j,i+1)

String s = "hello";// 截取索引1到索引3(不包含)之间的字符,得到"el"
System.out.println(s.substring(1, 3));  // 输出: el// 截取索引1到索引4(不包含)之间的字符,得到"ell"
System.out.println(s.substring(1, 4));  // 输出: ell// 截取索引0到索引5(不包含)之间的字符,也就是整个字符串
System.out.println(s.substring(0, 5));  // 输出: hello// 如果要截取从索引j到索引i(包含i)的字符,就需要使用i+1作为endIndex
int j = 1;
int i = 3;
System.out.println(s.substring(j, i + 1));  // 输出: ell

LCR 101. 分割等和子集 - 力扣(LeetCode)

class Solution {public boolean canPartition(int[] nums) {int sum = 0;int len = nums.length;for (int i = 0; i < len; i++) {sum += nums[i];}if (sum % 2 == 1) {return false;}int target = sum / 2;boolean[] dp = new boolean[target + 1];dp[0] = true; // 不选取任何元素时,和为0for (int i = 0; i < len; i++) {for (int j = target; j >= nums[i]; j--) {dp[j] = dp[j] || dp[j - nums[i]];}}return dp[target];}
}

416. 分割等和子集 - 力扣(LeetCode)

同上

LCR 103. 零钱兑换 - 力扣(LeetCode)

class Solution {public int coinChange(int[] coins, int amount) {if(amount == 0){return 0;}int len = coins.length;int[] dp = new int[amount+1];dp[0] = 0;// 正确初始化dp数组//因为后面要去取min值所以要去赋最大值for(int i = 1; i <= amount; i++){dp[i] = Integer.MAX_VALUE;}for(int i = 0; i < len; i++){for(int j = coins[i]; j <= amount; j++){// 状态转移方程if(dp[j - coins[i]] != Integer.MAX_VALUE){dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}}// 检查是否有解return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];}
}

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

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

相关文章

React Native打开相册选择图片或拍照 -- react-native-image-picker

官方文档&#xff1a;https://www.npmjs.com/package/react-native-image-picker 场景&#xff1a;点击按钮打开相册选择图片或者点击按钮拍照 import { launchCamera, launchImageLibrary } from react-native-image-picker;// ... <TouchableOpacityactiveOpacity{0.7}o…

USRP B210生成信号最大带宽测试之Frank

书接上文&#xff1a; USRP B210生成LFM,SFM,BPSK,Frank信号的最大带宽测试&#xff08;一&#xff09; USRP B210生成信号最大带宽测试&#xff08;二&#xff09;SFM USRP B210生成信号最大带宽测试&#xff08;三&#xff09;LFM USRP B210生成信号最大带宽测试之BPSK …

pages.json页面路由中,globalStyle的各个属性

欢迎来到我的UniApp技术专栏&#xff01;&#x1f389; 在这里&#xff0c;我将与大家分享关于UniApp开发的实用技巧、最佳实践和项目经验。 专栏特色&#xff1a; &#x1f4f1; 跨平台开发一站式解决方案 &#x1f680; 从入门到精通的完整学习路径 &#x1f4a1; 实战项目经…

[前端技术基础]CSS选择器冲突解决方法-由DeepSeek产生

在 CSS 中&#xff0c;当多个选择器对同一元素的相同属性&#xff08;如颜色&#xff09;定义发生冲突时&#xff0c;浏览器会通过层叠规则&#xff08;Cascading&#xff09;解决冲突。具体优先级从高到低如下&#xff1a;1. !important 规则&#xff08;最高优先级&#xff0…

解决 IDEA 中 XML 文件的 “URI is not registered” 报错

解决 IDEA 中 XML 文件的 “URI is not registered” 报错 在使用 IDEA 开发时&#xff0c;XML 文件&#xff08;尤其是带有 DTD 约束的配置文件&#xff0c;如 MyBatis、Spring 配置文件&#xff09;常出现 URI is not registered (Settings | Languages & Frameworks | S…

FreeBSD Conda Python3.12下安装GPT4Free(g4f)0.5.7.3版本

FreeBSD下不能直接安装g4f&#xff0c;因为Curl_cffi这个库装不上。0.5.0.3这个版本不需要这个库&#xff0c;所以可以安装。 那么就没有办法安装新版本了吗&#xff1f; 有的&#xff0c;就是在linux仿真环境下。 Linux仿真环境安装g4f 最简单的方法是使用chroot进入linux仿…

Node.js 中基于请求 ID 实现简单队列(即时阻止策略/排队等待策略)

在Node.js 中基于请求 ID 实现简单队列 下面示例演示两种策略&#xff0c;以同一个请求 ID 为单位&#xff1a; 即时阻止策略&#xff1a;如果已有相同 ID 的请求在处理&#xff0c;直接报错并返回。 排队等待策略&#xff1a;后续相同 ID 的请求不报错&#xff0c;而是挂起&…

详解如何解决Mysql主从复制延迟

解决 MySQL 主从复制延迟需要从架构设计、参数调优、硬件优化等多维度综合处理。一、根本原因分析主从延迟的本质是&#xff1a;从库的 SQL 线程重放速度 < 主库的写入速度 常见瓶颈点&#xff1a;单线程回放&#xff08;MySQL 5.6 前&#xff09;从库硬件配置低&…

Spring之事务使用指南

Spring之事务使用指南一、事务的基础概念1.1 什么是事务&#xff1f;1.2 事务的ACID特性1.3 Spring事务的核心优势二、Spring事务的核心配置三、事务传播行为&#xff08;Propagation&#xff09;3.1 常用传播行为详解3.1.1 REQUIRED&#xff08;默认值&#xff09;3.1.2 SUPPO…

基于FPGA的多级流水线加法器verilog实现,包含testbench测试文件

目录 1.课题概述 2.系统仿真结果 3.核心程序 4.系统原理简介 5.参考文献 6.完整工程文件 1.课题概述 流水线&#xff08;Pipeline&#xff09;技术源于工业生产中的装配线理念&#xff0c;在数字电路中&#xff0c;它将一个复杂运算任务分解为若干个子任务&#xff0c;每…

5.1.4习题精讲

一、单项选择题 01. 下列部件不属于控制器的是&#xff08; C &#xff09;。 题目原文 下列部件不属于控制器的是&#xff08; &#xff09;。 A. 指令寄存器 B. 程序计数器 C. 程序状态字寄存器 D. 时序电路 正确答案&#xff1a;C 题目解析 考点分析&#xff1a; 本题考察CP…

华为云Flexus+DeepSeek征文|低代码 × 强推理:华为云 Flexus 搭建可部署的 AI Agent 实践方案【搭建宠物养护小知识AI助手】

文章目录华为云FlexusDeepSeek征文&#xff5c;低代码 强推理&#xff1a;华为云 Flexus 搭建可部署的 AI Agent 实践方案【搭建宠物养护小知识AI助手】&#x1f680; 引言一、核心技术概览1. 华为云 Flexus X2. DeepSeek-R1 模型3. Dify 平台二、总体架构设计三、环境准备与资…

基于智慧经营系统的学校住宿登记报表分析与应用探究-毕业论文—仙盟创梦IDE

摘要本文聚焦学校住宿场景&#xff0c;以 “未来之窗智慧经营&#xff08;学校住宿&#xff09;” 系统生成的日报表、昨日报表、本月报表为研究对象&#xff0c;深入剖析报表数据结构、功能价值及在住宿管理中的应用。通过解读水费、电费、押金、房费、总计、订单等数据维度&a…

arping(ARP协议网络测试工具)

1. 项目介绍&#xff1a;arping 是一个用于在局域网&#xff08;LAN&#xff09;中查找特定 IP 地址是否被占用的实用工具。与传统的 ping 命令不同&#xff0c;arping 使用 ARP 协议来发送和接收数据包&#xff0c;从而能够检测到那些阻止 ICMP 请求的主机。arping 可以帮助网…

【UE5医学影像可视化】读取dicom数据生成2D纹理并显示

文章目录1.实现目标2.实现过程2.1 数据准备2.2 创建项目2.3 dcmtk库集成2.4 流程&原理2.5 材质2.6 应用实现3.参考资料1.实现目标 本文在UE5中读取本地的dicom文件&#xff0c;解析像素值、窗宽窗位等信息&#xff0c;生成2D纹理&#xff0c;在UE场景中实现简单的2D医学影像…

lua(xlua)基础知识点记录一

1. 关于 (…) 操作符 编译阶段优化&#xff1a;Lua 编译器会对常量字符串进行优化处理&#xff0c;将连续的字符串拼接操作 (…) 合并为单个字符串。这种优化仅适用于编译期确定的常量字符串&#xff0c;不适用于运行时生成的动态字符串。 示例&#xff1a;local str "He…

【Python数据采集】Python爬取小红书搜索关键词下面的所有笔记的内容、点赞数量、评论数量等数据,绘制词云图、词频分析、数据分析

Python爬取小红书搜索关键词下面的所有笔记的内容、点赞数量、评论数量等数据&#xff0c;绘制词云图、词频分析、数据分析 使用 Python 编写一个简单的爬虫程序来从小红书抓取与指定关键词相关的笔记数据&#xff0c;并对这些数据进行基本的数据分析&#xff0c;包括词云图和…

最大子数组和问题-详解Kadane算法

最大子数组和问题-详解Kadane算法一、问题定义与暴力解法1.1 问题描述1.2 暴力解法的低效性二、Kadane算法的核心原理2.1 动态规划思想的应用2.2 优化空间复杂度三、Kadane算法的Java实现3.1 基础版本&#xff08;处理所有情况&#xff09;3.2 算法正确性验证四、Kadane算法的变…

Mongoose网络库深度解析:从单线程到多线程的架构演进

0. 引言&#xff1a;C/C网络编程的困境与突破 在C/C开发领域&#xff0c;网络编程一直是一个令人头疼的问题。与Python的requests库或Go的net/http包不同&#xff0c;C/C缺乏统一的包管理体系和标准化的网络API。开发者往往需要面对gcc/msvc版本差异、平台兼容性问题、以及各种…

Jfinal+SQLite处理 sqlite数据库执行FIND_IN_SET报错

方法一原代码sql " and FIND_IN_SET(s.M_ID," ids ")"; 修改为 sql " where s.M_ID"getInSql(ids);public static String getInSql(String ids) {String[] idArray ids.split(",");StringBuilder sql new StringBuilder(" I…