【LeetCode-面试经典150题-day20】
目录
70.爬楼梯
198.打家劫舍
139.单词拆分
322.零钱兑换
300.最长递增子序列
70.爬楼梯
题意:
假设你正在爬楼梯。需要
n
阶你才能到达楼顶。每次你可以爬
1
或2
个台阶。你有多少种不同的方法可以爬到楼顶呢?提示:
1 <= n <= 45
【输入样例】n=2
【输出样例】2
解题思路:
1. 明确当爬到第一阶台阶的时候,只有一种做法,就是这一步爬1个台阶;爬到第二阶台阶的时候有两种做法,就是走2个1台阶或1次2台阶。
2.当你要爬到第n阶台阶的时候,你有两种选择,一种选择是最后一步走1个台阶,意味着你的爬法=走到n-1个台阶的爬法;第二种选择是最后一步走2个台阶,意味着你的爬法=走到n-2个台阶的爬法;所有走到n阶的爬法应该是走到n-1+走到n-2
3. 因为n的范围很小,用数组实现,如果要方便直接将num[1]和num[2]的值先赋值好的话,初始化不要写new int[n],不然需要先判断n是否大于1,是否大于2.
class Solution {public int climbStairs(int n) {int[] num=new int[50];num[1]=1;num[2]=2;for(int i=3;i<=n;i++){num[i] = num[i-1]+num[i-2];}return num[n];}
}
时间: 击败了100.00%
内存: 击败了39.14%
198.打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 400
【输入样例】[1,2,3,1]
【输出样例】4
解题思路:
1.定义一个数组count存储打劫到第i家的时候可以获得的最高金额;
2.寻找关系,为了不触动警报的前提下获取最多金额,我们采取隔房打劫的思路,在第i家的时候,如果选择打劫第i家,那么其金额应该是nums[i]+count[i-2];如果不选择打劫第i家,到这里的的金额是count[i-1],要获得最高的金额,就需要比较哪一种做法金额较高;
3. 确定初始值,打劫第一家的时候,没有选择,count[1]=nums[1],打劫第二家也一样,不能触发警报,只能打劫本身count[2]=nums[2],但是,其也可以选择不打劫第二家,打劫第一家,即count[2]=max(nums[2],count[1])
class Solution {public int rob(int[] nums) {int len = nums.length;int[] count = new int[len];count[0] = nums[0];if(len >= 2 )count[1] = Math.max(nums[1],count[0]);for(int i = 2;i<len;++i){count[i] = Math.max(count[i-1],count[i-2]+nums[i]);}return count[len-1];}
}
时间: 击败了100.00%
内存: 击败了67.42%
139.单词拆分
给你一个字符串
s
和一个字符串列表wordDict
作为字典。请你判断是否可以利用字典中出现的单词拼接出s
。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
提示:
1 <= s.length <= 300
1 <= wordDict.length <= 1000
1 <= wordDict[i].length <= 20
s
和wordDict[i]
仅由小写英文字母组成wordDict
中的所有字符串 互不相同
【输入样例】s = "leetcode", wordDict = ["leet", "code"]
【输出样例】true
解题思路:
1. 定义数组dp[i],表示字符串长度为i时,是否可以拆解为一个或多个在字典中出现的单词,可以为true,不让为false;
2. dp[0]表示空字符串,此时默认为true
3. 字符串长度为i时,dp[i]的取值依靠什么?假设j<i,dp[j]=true且字符串字串(j,i]存在字典中,则dp[i]为true;
4. 遍历结束时将dp[s.length]return
5. 为了更好的判断字串(j,i]是否在字典中,先将字典转换成set
class Solution {public boolean wordBreak(String s, List<String> wordDict) {HashSet<String> set = new HashSet<String>(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] && set.contains(s.substring(j,i))){dp[i] = true;break;//j这里不用再遍历了,从下一位i开始}}}return dp[s.length()];}
}
时间: 击败了66.63%
内存: 击败了70.02%
322.零钱兑换
给你一个整数数组
coins
,表示不同面额的硬币;以及一个整数amount
,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回
-1
。你可以认为每种硬币的数量是无限的。
【输入样例】coins =
[1, 2, 5]
, amount =11
【输出样例】3
11=5+5+1
解题思路:
1. 定义数组dp[i],表示凑足总额为i所需的最高硬币个数
2. 寻找规律,凑足金额为i-coins[j]的最少个数为dp[i-coins[j]],那么只需要加上一个硬币coins[j]即可获得dp[i],dp[i]取小min(dp[i],dp[i-coins[j]]+1);
3. 数组初始化,凑如总金额为0所需的钱币个数为0,dp[0]=0,其余的dp[i]下标为最大值,因为要进行min操作
class Solution {public int coinChange(int[] coins, int amount) {int max = Integer.MAX_VALUE;int[] dp = new int[amount+1];//初始化数组for(int i = 1; i< amount+1;++i){dp[i] = max;}dp[0] = 0;for(int j = 0;j < coins.length;++j){//从这个钱币开始for(int i = coins[j]; i <=amount; ++i){if(dp[i-coins[j]] != max){dp[i] = Math.min(dp[i],dp[i-coins[j]]+1);}}}return dp[amount] == max ? -1 : dp[amount];}
}
时间: 击败了45.96%
内存: 击败了19.52%
300.最长递增子序列
给你一个整数数组
nums
,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,
[3,6,2,7]
是数组[0,3,1,6,2,2,7]
的子序列。
【输入样例】nums = [10,9,2,5,3,7,101,18]
【输出样例】4
[2,3,7,101]
解题思路:
1. 定义数组dp[i],表示i之前包括i的以nums[i]结尾的最长递增子序列的长度
2. 位置i的最长递增子序列等于j从0到i-1各个位置的最长递增子序列+1的最大值
3. dp[i]的默认大小为1,就是只选择本身的情况
class Solution {public int lengthOfLIS(int[] nums) {int[] dp = new int[nums.length];int res = 1;for(int i=0;i<nums.length;++i){dp[i] = 1;}for(int i = 1; i < nums.length; ++i){for(int j = 0;j < i; ++j){if(nums[i] > nums[j]){//递增子序列,所以要大才可以计算dp[i] = Math.max(dp[i],dp[j]+1);}res = Math.max(dp[i],res);}}return res;}
}
时间: 击败了25.90%
内存: 击败了15.18%
相关文章:
【LeetCode-面试经典150题-day20】
目录 70.爬楼梯 198.打家劫舍 139.单词拆分 322.零钱兑换 300.最长递增子序列 70.爬楼梯 题意: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 提示: 1 < n < …...
回归与聚类算法系列②:线性回归
目录 1、定义与公式 2、应用场景 3、特征与目标的关系分析 线性回归的损失函数 为什么需要损失函数 损失函数 ⭐如何减少损失 4、优化算法 正规方程 梯度下降 优化动态图 偏导 正规方程和梯度下降比较 5、优化方法GD、SGD、SAG 6、⭐线性回归API 7、实例&#…...
springBoot:redis使用
需求:查询酒店房间列表 1、引入依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2、配置yml文件 server:port: 80…...
cmake 选择 vs编译器
QQ:2967732156 QQ交流群:622684416 // 编译VS2017版本的Tars, Release版本 // win32 cmake .. -G "Visual Studio 15 2017" -D CMAKE_BUILD_TYPERelease // x64 cmake .. -G "Visual Studio 15 2017 Win64" -D CMAKE_BUILD_…...

项目(智慧教室)第一部分:cubemx配置,工程文件的移植,触摸屏的检测,项目bug说明
第一章:需求与配置 一。项目需求 二。实现外设控制 注意: 先配置引脚,再配置外设。否则会出现一些不可预料的问题 1.时钟,串口,灯,蜂鸣器配置 (1)RCC配置为外部时钟,修…...
Springboot集成redis--不同环境切换
1.单机配置 spring:redis:mode: singletonhost: 127.0.0.1port: 6379lettuce:pool:max-active: 8 #连接池最大阻塞等待时间(使用负值表示没有限制max-idle: 2 #连接池中的最大空闲连接min-idle: 1 #连接池最大阻塞等待时间(使用负值表示没有限…...

稀疏数组的实现
文章目录 目录 文章目录 前言 一 什么是稀疏数组? 二 稀疏数组怎么存储数据? 三 稀疏数组的实现 总结 前言 大家好,好久不见了,这篇博客是数据结构的第一篇文章,望大家多多支持! 一 什么是稀疏数组? 稀疏数组(Sparse Array)是一种数据结构&a…...
表达式语言的新趋势!了解SPEL如何改变开发方式
文章首发地址 SpEL(Spring Expression Language)是一种表达式语言,由Spring框架提供和支持。它可以在运行时对对象进行解析和计算,用于动态地构建和操作对象的属性、方法和表达式。以下是SpEL的一些特性和功能: 表达式…...

一套成熟的实验室信息管理系统(云LIS源码)ASP.NET CORE
一套成熟的实验室信息管理系统,集前处理、检验、报告、质控、统计分析、两癌等模块为一体的网络管理系统。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。 LIS把检验、检疫、放免、细菌微生物及科研使用的各类分析仪器,通过计算机联…...

NPM使用技巧
NPM使用技巧 前言技巧全局模块位置PowerShell报错安装模块冲突 NPM介绍NPM命令使用方法基本命令模块命令查看模块运行命令镜像管理 常用模块rimrafyarn 前言 本文包含NodeJS中NPM包管理器的使用技巧,具体内容包含NPM介绍、NPM命令、常用模块等内容,还包…...
java学习一
目录 Java 与 C 的区别 Java程序是编译执行还是解释执行 编译型语言 解释型语言 Java 与 C 的区别 Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C 兼容 C ,不但支持面向对象也支持面向过程。Java 通过虚拟机从而实现…...
PV PVC in K8s
摘要 在Kubernetes中,PV(Persistent Volume)和PVC(Persistent Volume Claim)是用于管理持久化存储的重要资源对象。PV表示存储的实际资源,而PVC表示对PV的声明性要求。当应用程序需要使用持久化存储时&…...

SAP-PP:基础概念笔记-5(物料主数据的MRP1~4视图)
文章目录 前言一、MRP1视图Base Unit of Measure(UoM)MRP 组采购组ABC 指示器Plant-Specific Material Status 特定的工厂物料状态MRP 类型 MRP TypeMRP 类型 MRP TypeMaster Production Scheduling(MPS) 主生产计划基于消耗的计划(CBP)再订货点Reorder-…...

【C语言】初阶测试 (带讲解)
目录 ① 选择题 1. 下列程序执行后,输出的结果为( ) 2. 以下程序的输出结果是? 3. 下面的代码段中,执行之后 i 和 j 的值是什么() 4. 以下程序的k最终值是: 5. 以下程序的最终的输出结果为ÿ…...

用huggingface.Accelerate进行分布式训练
诸神缄默不语-个人CSDN博文目录 本文属于huggingface.transformers全部文档学习笔记博文的一部分。 全文链接:huggingface transformers包 文档学习笔记(持续更新ing…) 本部分网址:https://huggingface.co/docs/transformers/m…...

unity 物体至视图中心以及新对象创建位置
如果游戏对象不在视野中心或在视野之外, 一种方法是双击Hierarchy中的对象名称 另一种是选中后按F 新建物体时对象的位置不是在坐标原点,而是在当前屏幕的中心...

船舶稳定性和静水力计算——绘图体平面图,静水力,GZ计算(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Python 网页爬虫的原理是怎样的?
网页爬虫是一种自动化工具,用于从互联网上获取和提取信息。它们被广泛用于搜索引擎、数据挖掘、市场研究等领域。 网页爬虫的工作原理可以分为以下几个步骤:URL调度、页面下载、页面解析和数据提取。 URL调度: 网页爬虫首先需要一个初始的U…...

python技术面试题合集(二)
python技术面试题 1、简述django FBV和CBV FBV是基于函数编程,CBV是基于类编程,本质上也是FBV编程,在Djanog中使用CBV,则需要继承View类,在路由中指定as_view函数,返回的还是一个函数 在DRF中的使用的就是…...
【linux命令讲解大全】089.使用tree命令快速查看目录结构的方法
文章目录 tree补充说明语法选项列表选项文件选项排序选项图形选项XML / HTML / JSON 选项杂项选项 参数实例 从零学 python tree 树状图列出目录的内容 补充说明 tree 命令以树状图列出目录的内容。 语法 tree [选项] [参数]选项 列表选项 -a:显示所有文件和…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...