LeetCode Hot100(动态规划)
70. 爬楼梯
题目:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
题解:
不难发现,每一次都是从i-1或者i-2爬上来的,我们加起来求和即可
class Solution {public int climbStairs(int n) {int []arr=new int[n+2];arr[1]=1;arr[2]=2;for(int i=3;i<=n;i++){arr[i]=arr[i-1]+arr[i-2];}return arr[n];}
}
118. 杨辉三角
题目:
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
题解:
根据题意模拟即可
class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>>arr=new ArrayList<>();for(int i=0;i<numRows;i++){List<Integer>list=new ArrayList<>();for(int j=0;j<=i;j++){if(j==0||j==i){list.add(1);}else{list.add(arr.get(i-1).get(j-1)+arr.get(i-1).get(j));}}arr.add(list);}return arr;}
}
198. 打家劫舍
题目:
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
题解
由于相连房屋不可以进行相连盗窃,就会出现两种情况1001或者101,那么我们设dpi1为盗窃当前房屋的最大值,该值需要加上前面i-1的没有盗窃的最大值,同理dpi2为没有盗窃的,需要加上前面1,2取一个最大值即可
class Solution {public int rob(int[] nums) {int ans=0;int [][]dp= new int[nums.length+2][2];dp[0][0]=0;dp[0][1]=nums[0];for(int i=1;i<nums.length;i++){dp[i][0]=Math.max(dp[i-1][1],dp[i-1][0]);dp[i][1]=Math.max(nums[i]+dp[i-1][0],dp[i-1][1]);}return Math.max(dp[nums.length-1][0],dp[nums.length-1][1]);}
}
279. 完全平方数
题目
给你一个整数 n
,返回 和为 n
的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1
、4
、9
和 16
都是完全平方数,而 3
和 11
不是。
题解
我们发现最大值只有1e4,所以我们的最大平方数就是100了,然后我们就认为每一个数都由1-100之中的某几个组成,也就是一个完全背包问题了,枚举即可
class Solution {public int numSquares(int n) {int []brr=new int[200];for(int i=1;i<=100;i++){brr[i]=i*i;}int []dp=new int[n+2];for(int i=1;i<=n;i++){dp[i]=10000;}for(int i=1;i<=100;i++){for(int j=1;j<=n;j++){if(j>=brr[i]){dp[j]=Math.min(dp[j],dp[j-brr[i]]+1);}}}return dp[n];}
}
322. 零钱兑换
题意
给你一个整数数组 coins
,表示不同面额的硬币;以及一个整数 amount
,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1
。你可以认为每种硬币的数量是无限的。
题解
跟上一题一样,跑完全背包即可,不过不需要记录次数了
class Solution {public int coinChange(int[] coins, int amount) {int []dp=new int[amount+10];for(int i=1;i<=amount;i++){dp[i]=amount+1;}for(int i=0;i<coins.length;i++){for(int j=0;j<=amount;j++){if(j>=coins[i]){dp[j]=Math.min(dp[j],dp[j-coins[i]]+1);}}}if(dp[amount]==amount+1){return -1;}return dp[amount];}
}
139. 单词拆分
题意
给你一个字符串 s
和一个字符串列表 wordDict
作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s
则返回 true
。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
题解
我们直接可以手动模拟,设置dpi是当前位置是否能够被拼接成功,那么我们每一次枚举到一个位置,就去枚举所有的字串,如果当前的字串能够完全的匹配i和i-length+1的字串,就去看看i-length是否可以,如果可以当前位置也就可以了
import java.util.*;import static java.util.Collections.reverse;class Solution {public static void main(String[] args) {List<String> list =new ArrayList<>();list.add("aaaaaa");list.add("aa");String s="aaaaaaa";wordBreak(s,list);}public static boolean wordBreak(String s, List<String> wordDict) {int []dp=new int[s.length()];char []arr=s.toCharArray();char [][]brr=new char[wordDict.size()][];for(int i=0;i<brr.length;i++){brr[i]=wordDict.get(i).toCharArray();}for(int i=0;i<arr.length;i++){//5 -5 4 3 2for(int j=0;j<brr.length;j++){int l=i-brr[j].length+1;if(l<0){continue;}int l2=0;int mark=1;while(l2<brr[j].length&&l<=i){if(brr[j][l2]!=arr[l]){mark=0;break;}l2++;l++;}if(mark==0){continue;}l=i-brr[j].length;if(l==-1||dp[l]==1){dp[i]=1;}}}if(dp[s.length()-1]==1){return true;}return false;}}
300. 最长递增子序列
题意
求一个序列的最长上升子序列
题解
模板题,可以直接背诵,有兴趣的同学可以在网上搜索证明
import java.util.*;import static java.util.Collections.reverse;class Solution {public static void main(String[] args) {}public int lengthOfLIS(int[] nums) {int []ans=new int[nums.length+3];if(nums.length==0){return 0;}int len=1;ans[1]=nums[0];for(int i=1;i<nums.length;i++){if(nums[i]>ans[len]){ans[++len]=nums[i];}else{ans[findx(ans,len,nums[i])]=nums[i];}}return len;}public static int findx(int []nums,int len,int x){int l=1;int r=len;while(l<=r){int mid=(l+r)>>1;if(nums[mid]>=x){r=mid-1;}else{l=mid+1;}}return l;}}
152. 乘积最大子数组
题意
给你一个整数数组 nums
,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。
题解
我们发现存在负数,因为一个负数会让当前的值取反,那么我们维护一下到达当前位置的max和min即可
class Solution {public int maxProduct(int[] nums) {int[] dpMax = new int[nums.length];int[] dpMin = new int[nums.length];dpMax[0] = nums[0];dpMin[0] = nums[0];int maxProduct = nums[0]; for (int i = 1; i < nums.length; i++) {int candidate1 = dpMax[i-1] * nums[i]; int candidate2 = dpMin[i-1] * nums[i]; int currentNum = nums[i]; dpMax[i] = Math.max(currentNum, Math.max(candidate1, candidate2));dpMin[i] = Math.min(currentNum, Math.min(candidate1, candidate2));maxProduct = Math.max(maxProduct, dpMax[i]);}return maxProduct;}
}
416. 分割等和子集
题意
给你一个 只包含正整数 的 非空 数组 nums
。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
题解
我们由于只能分成两个集合,那么两个集合的和明显是总的和/2 ,记录总和为sum,每个数组的和也就是sum/2,又发现,每个元素只能拿一个,那我们如果能够抽起来sum/2就可以了,去跑一便01背包
import java.util.Arrays;public class Solution {public static void main(String[] args) {}public boolean canPartition(int[] nums) {int sum = Arrays.stream(nums).sum();if(sum%2==1){return false;}int n=sum/2;int []dp=new int[n+2];dp[0]=1;for(int i=0;i<nums.length;i++){for(int j=n;j>=0;j--){if(nums[i]>j){break;}dp[j]=dp[j-nums[i]]|dp[j];}}return dp[n]==1?true:false;
// return false;}public static int findx(int []nums,int len,int x){int l=1;int r=len;while(l<=r){int mid=(l+r)>>1;if(nums[mid]>=x){r=mid-1;}else{l=mid+1;}}return l;}}
32. 最长有效括号
题意
给你一个只包含 '('
和 ')'
的字符串,找出最长有效(格式正确且连续)括号子串的长度
题解
感觉没有什么太好的做法,我直接用栈进行模拟的,看看当前位置是否是合理的,记录一下,最后求一个最长的子序列即可
import java.util.Arrays;
import java.util.Stack;public class Solution {public static void main(String[] args) {String s="(()";longestValidParentheses(s);}public static int longestValidParentheses(String s) {char []arr=s.toCharArray();Stack<node>brr=new Stack<>();int []dp=new int[arr.length+1];for(int i=0;i<arr.length;i++){node now=new node();now.id=i;now.f=arr[i];if(brr.isEmpty()){brr.push(now);}else if(now.f=='('){brr.push(now);}else {if(brr.peek().f=='('){dp[brr.peek().id]=1;dp[i]=1;brr.pop();}else{brr.push(now);}}}System.out.println(Arrays.toString(dp));int maxx=0;for(int i=0;i<arr.length;i++){if(i==0||dp[i]==0){continue;}else{dp[i]=dp[i]+(dp[i-1]==0?0:dp[i-1]);maxx=Math.max(dp[i],maxx);}}return maxx;}public static class node{int id;char f;}}
相关文章:
LeetCode Hot100(动态规划)
70. 爬楼梯 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 题解: 不难发现,每一次都是从i-1或者i-2爬上来的,我们加起来求和即可 class So…...

Opencv实用操作5 图像腐蚀膨胀
相关函数 腐蚀函数 img1_erosion cv2.erode(img1,kernel,iterations1) (图片,卷积核,次数) 膨胀函数 img_dilate cv2.dilate(img2,kernel1,iterations1) (图片,卷积核,次数)…...

【赵渝强老师】OceanBase的部署架构
OceanBase数据库支持无共享(Shared-Nothing,SN)模式和共享存储(Shared-Storage,SS)模式两种部署架构。 一、 无共享(Shared-Nothing,SN)模式 在SN模式下,各…...
(18)混合云架构部署
文章目录 🚀 混合云架构部署:Java应用的云原生之旅🌩️ 混合云架构简介⚡ Java应用云原生部署五大核心技术1️⃣ 容器化与编排技术2️⃣ 服务网格与API网关3️⃣ CI/CD自动化流水线4️⃣ 多云管理平台5️⃣ 云原生Java框架与运行时 …...
c/c++的opencv霍夫变换
OpenCV中的霍夫变换 (C/C) Hough Transform 霍夫变换 (Hough Transform) 是一种在图像分析中用于检测几何形状(如直线、圆形等)的特征提取技术。它通过一种投票机制在参数空间中寻找特定形状的实例。OpenCV 库为 C 开发者提供了强大且易用的霍夫变换函数…...
AAOS系列之(七) --- AudioRecord录音逻辑分析(一)
一文讲透AAOS架构,点到为止不藏私 📌 这篇帖子给大家分析下 AudioRecord的初始化 1. 场景介绍: 在 AAOS 的 Framework 开发中,录音模块几乎是每个项目都会涉及的重要组成部分。无论是语音控制、车内对讲(同行者模式)…...
MySQL大表结构变更利器:pt-online-schema-change原理与实战指南
MySQL大表结构变更利器:pt-online-schema-change原理与实战指南 MySQL数据库运维中,最令人头疼的问题之一莫过于对大表进行结构变更(DDL操作)。传统的ALTER TABLE操作会锁表,导致业务长时间不可用,这在724小时运行的互联网业务中是不可接受的。本文将深入剖析Percona To…...

LangChain【3】之进阶内容
文章目录 说明一 LangChain Chat Model1.1 少量示例提示(Few-Shot Prompting)1.2 Few-Shot示例代码1.3 示例选择器(Eample selectors)1.4 ExampleSelector 类型1.5 ExampleSelector案例代码1.6 LangServe工具1.7 LangServe安装1.8 langchain项目结构1.9 …...

大规模JSON反序列化性能优化实战:Jackson vs FastJSON深度对比与定制化改造
背景:500KB JSON处理的性能挑战 在当今互联网复杂业务场景中,处理500KB以上的JSON数据已成为常态。 常规反序列化方案在CPU占用(超30%)和内存峰值(超原始数据3-5倍)方面表现堪忧。 本文通过Jackson与Fas…...
【OpenSearch】高性能 OpenSearch 数据导入
高性能 OpenSearch 数据导入 1.导入依赖库2.配置参数3.OpenSearch 客户端初始化4.创建索引函数5.数据生成器6.批量处理函数7.主导入函数7.1 函数定义和索引创建7.2 优化索引设置(导入前)7.3 初始化变量和打印开始信息7.4 线程池设置7.5 主数据生成和导入…...
HTML5有那些更新
语义化标签 header 头部nav 导航栏footer 底部aside 内容的侧边栏 媒体标签 audio 音频播放video 视频播放 dom查询 document.querySelector,document.querySelectorAll他们选择的对象可以是标签,也可以是类(需要加点),也可以是ID(需要加#) web存储 localStorage和sessi…...

AWS EC2 实例告警的创建与删除
在AWS云环境中,监控EC2实例的运行状态至关重要。通过CloudWatch告警,用户可以实时感知实例的CPU、网络、磁盘等关键指标异常。本文将详细介绍如何通过AWS控制台创建EC2实例告警,以及如何安全删除不再需要的告警规则,并附操作截图与…...

STM32 搭配 嵌入式SD卡在智能皮电手环中的应用全景评测
在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业进入全新发展阶段。二者凭借低功耗、高速读写与卓越稳定性的深度融合,以及高容量低成本的突出优势,成为大规模…...

黑马点评项目01——短信登录以及登录校验的细节
1.短信登录 1.1 Session方式实现 前端点击发送验证码,后端生成验证码后,向session中存放键值对,键是"code",值是验证码;然后,后端生成sessionID以Cookie的方式发给前端,前端拿到后&a…...

【笔记】Windows 系统安装 Scoop 包管理工具
#工作记录 一、问题背景 在进行开源项目 Suna 部署过程中,执行设置向导时遭遇报错:❌ Supabase CLI is not installed. 根据资料检索,需通过 Windows 包管理工具Scoop安装 Supabase CLI。 初始尝试以管理员身份运行 PowerShell 安装 Scoop…...
LVS + Keepalived高可用群集
目录 一:keepalived双击热备基础知识 1.keepalived概述及安装 1.1keepalived的热备方式 1.2keepalived的安装与服务控制 (1)安装keepalived (2)控制keepalived服务 2.使用keepalived实现双击热备. 2.1主服务器的…...

MySQL之约束和表的增删查改
MySQL之约束和表的增删查改 一.数据库约束1.1数据库约束的概念1.2NOT NULL 非空约束1.3DEFAULT 默认约束1.4唯一约束1.5主键约束和自增约束1.6自增约束1.7外键约束1.8CHECK约束 二.表的增删查改2.1Create创建2.2Retrieve读取2.3Update更新2.4Delete删除和Truncate截断 一.数据库…...
Greenplum:PB级数据分析的分布式引擎,揭开MPP架构的终极武器
一、Greenplum是谁?—— 定位与诞生背景 核心定位:基于PostgreSQL的开源分布式分析型数据库(OLAP),专为海量数据分析设计,支撑PB级数据仓库、商业智能(BI)和实时决策系统。 诞生背…...

Oracle数据库性能优化的最佳实践
原创:厦门微思网络 以下是 Oracle 数据库性能优化的最佳实践,涵盖设计、SQL 优化、索引管理、系统配置等关键维度,帮助提升数据库响应速度和稳定性: 一、SQL 语句优化 1. 避免全表扫描(Full Table Scan)…...
云原生时代 Kafka 深度实践:02快速上手与环境搭建
2.1 本地开发环境搭建 单机模式安装 下载与解压:前往Apache Kafka 官网,下载最新稳定版本的 Kafka 二进制包(如kafka_2.13-3.6.0.tgz,其中2.13为 Scala 版本)。解压到本地目录,例如/opt/kafka:…...
Redis7 新增数据结构深度解析:ListPack 的革新与优化
Redis 作为高性能的键值存储系统,其核心优势之一在于丰富的数据结构。随着版本迭代,Redis 不断优化现有结构并引入新特性。在 Redis 7.0 中,ListPack 作为新一代序列化格式正式登场,替代了传统的 ZipList(压缩列表&…...
分布式爬虫架构设计
随着互联网数据的爆炸式增长,单机爬虫已经难以满足大规模数据采集的需求。分布式爬虫应运而生,它通过多节点协作,实现了数据采集的高效性和容错性。本文将深入探讨分布式爬虫的架构设计,包括常见的架构模式、关键技术组件、完整项…...

汽配快车道:助力汽车零部件行业的产业重构与数字化出海
汽配快车道:助力汽车零部件行业的数字化升级与出海解决方案。 在当今快速发展的汽车零部件市场中,随着消费者对汽车性能、安全和舒适性的要求不断提高,汽车刹车助力系统作为汽车安全的关键部件之一,其市场需求也在持续增长。汽车…...

Windows 11 家庭版 安装Docker教程
Windows 家庭版需要通过脚本手动安装 Hyper-V 一、前置检查 1、查看系统 快捷键【winR】,输入“control” 【控制面板】—>【系统和安全】—>【系统】 2、确认虚拟化 【任务管理器】—【性能】 二、安装Hyper-V 1、创建并运行安装脚本 在桌面新建一个 .…...

PyQt6基础_QtCharts绘制横向柱状图
前置: pip install PyQt6-Charts 结果: 代码: import sysfrom PyQt6.QtCharts import (QBarCategoryAxis, QBarSet, QChart,QChartView, QValueAxis,QHorizontalBarSeries) from PyQt6.QtCore import Qt,QSize from PyQt6.QtGui import QP…...

《TCP/IP 详解 卷1:协议》第2章:Internet 地址结构
基本的IP地址结构 分类寻址 早期Internet采用分类地址(Classful Addressing),将IPv4地址划分为五类: A类和B类网络号通常浪费太多主机号,而C类网络号不能为很多站点提供足够的主机号。 子网寻址 子网(Su…...
Python学习(5) ----- Python的JSON处理
下面是关于 Python 中如何全面处理 JSON 的详细说明,包括模块介绍、数据类型映射、常用函数、文件操作、异常处理、进阶技巧等。 🧩 一、什么是 JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&a…...

如何通过一次需求评审,让项目效率提升50%?
想象一下,你的团队启动了一个新项目,但需求模糊不清,开发到一半才发现方向错了,返工、加班、客户投诉接踵而至……听起来像噩梦?一次完美的需求评审就能避免这一切!它就像项目的“导航仪”,确保…...

再见Notepad++,你好Notepad--
Notepad-- 是一款国产开源的轻量级、跨平台文本编辑器,支持 Window、Linux、macOS 以及国产 UOS、麒麟等操作系统。 除了具有常用编辑器的功能之外,Notepad-- 还内置了专业级的代码对比功能,支持文件、文件夹、二进制文件的比对,支…...

element-plus bug整理
1.el-table嵌入el-image标签预览时,显示错乱 解决:添加preview-teleported属性 <el-table-column label"等级图标" align"center" prop"icon" min-width"80"><template #default"scope"&g…...