- 博客(199)
- 收藏
- 关注
原创 LeetCode刷题记录----279.完全平方数(Medium)
该文探讨了完全平方数问题的两种解法:动态规划和数学优化。动态规划解法通过构建dp数组,记录每个数的最小完全平方数和,时间复杂度O(n√n)。数学优化基于拉格朗日四平方定理,将问题转化为判断数字能否表示为1/2/3/4个平方数之和,时间复杂度降至O(√n)。文章强调了枚举在解决数字相加问题中的重要性,并比较了两种方法的优劣,指出数学方法在效率上的显著优势。
2025-09-20 11:31:44
130
原创 LeetCode刷题记录----198.打家劫舍(Medium)
本文讨论了"打家劫舍"问题的动态规划解法。对于一排房屋,每个房屋有两种选择(偷或不偷),决策取决于前一个房屋的状态。建立动态规划数组dp[i]表示偷到第i个房屋的最大金额,状态转移方程为dp[i]=max(dp[i-2]+nums[i], dp[i-1])。算法时间复杂度O(n),空间复杂度O(n)。关键在于识别每个房屋的状态选择及其与前序房屋的关系,从而建立正确的状态转移方程。
2025-09-20 11:11:25
271
原创 LeetCode刷题记录----763.划分字母区间(Medium)
【摘要】本文提出两种解决字符串分段问题的算法。第一种采用双遍历法:先统计字母频率,再通过哈希集合动态维护当前片段的字母集合,当集合为空时完成切割。第二种优化为贪心算法:先记录每个字母的最远位置,遍历时动态更新当前能到达的最远位置,到达时进行切割。两种方法时间复杂度均为O(n),但后者空间复杂度优化至O(1)。关键是通过字母的最远位置这一核心特征,将问题转化为类似跳跃游戏的贪心策略。
2025-09-19 10:34:45
456
原创 LeetCode刷题记录----45. 跳跃游戏 II(Medium)
摘要:该文介绍了跳跃游戏II的贪心算法解法。通过动态维护最大可达位置maxCanReach和当前跳跃边界end,在遍历数组时,当到达end位置时触发跳跃,更新end为maxCanReach并增加跳跃计数。算法确保每次跳跃都选择最远可达位置,时间复杂度O(n),空间复杂度O(1)。关键点在于及时更新最大可达位置和准确判断跳跃时机。
2025-09-19 10:16:38
338
原创 LeetCode刷题记录----55.跳跃游戏(Medium)
本文探讨了跳跃游戏问题的两种解法。初始采用递归回溯法,通过遍历所有可能的跳跃路径判断能否到达终点,但时间复杂度高达O(2^n)。随后提出更优的贪心算法,通过维护最远可达位置maxCanReach,在O(n)时间内解决问题。关键点在于:1)递归回溯法虽可行但效率低;2)贪心算法只需跟踪最远可达位置即可判断结果,避免冗余计算。该问题体现了不同算法在解决同一问题时的效率差异,特别是当仅需判断可行性时,贪心算法往往更高效。
2025-09-18 11:06:29
333
原创 LeetCode刷题记录----121.买卖股票的最佳时机(easy)
摘要:本文讨论了股票买卖问题的最优解求法。通过分析暴力解法(O(N^2))和贪心算法(O(N))两种实现,指出贪心算法通过跟踪最低买入价和最大利润来优化效率。代码示例展示了如何用贪心思想在单次遍历中解决问题,强调对于极值类问题应优先考虑贪心策略的优势。
2025-09-18 10:50:20
173
原创 LeetCode刷题记录----295.数据流的中位数(Hard)
本文探讨了LeetCode 295题"数据流的中位数"的解题思路。作者首先尝试了两种超时方法:一是使用单一堆结构,每次查询时弹出半数元素计算中位数;二是维护有序列表,每次插入后进行快速排序。随后提出优化方案:采用大小根堆结合的方式,大根堆存储较小半数数据,小根堆存储较大半数数据,保持两堆元素数量平衡。该方法实现插入操作O(logN)时间复杂度和查询O(1)时间复杂度,空间复杂度O(N)。通过堆顶元素即可快速获取中位数,有效解决了数据流中实时计算中位数的问题。
2025-09-17 11:46:37
503
原创 LeetCode刷题记录----347.前K个高频元素(Medium)
摘要:本文探讨了在数组中寻找前K个高频元素的三种解法。1)最大堆法:统计频率后构建最大堆,出堆K次获取结果,时间复杂度O(NlogN);2)最小堆法:维护大小为K的最小堆,遍历时保留高频元素,时间复杂度优化至O(NlogK);3)快速选择法:基于快速排序思想,通过基准值分割区间定位前K大元素,平均时间复杂度O(N)。三种方法的空间复杂度均为O(N),其中最小堆法和快速选择法在效率上更具优势。
2025-09-17 10:06:04
1000
原创 LeetCode刷题记录----215.数组中的第K个最大元素(Medium)(再做一次)
摘要:文章介绍了两种在数组中查找第K大元素的算法。1.优先队列法:构建最小堆,保持堆大小为K,堆顶即为第K大元素,时间复杂度O(nlogk),空间复杂度O(k)。2.快速选择法:基于快速排序的分治思想,通过基准值定位目标元素位置,平均时间复杂度O(n),最坏O(n²)。两种方法各有适用场景:优先队列适合动态维护,快速选择适合固定长度数组的高效查找。
2025-09-16 10:33:04
675
原创 LeetCode刷题记录----215.数组中的第K个最大元素(Medium)
本文通过最大堆实现数组第K大元素查找。首先构建最大堆(从中间节点开始下沉操作),然后执行k-1次删除堆顶元素操作(每次将末尾元素移至堆顶并下沉),最终堆顶即为结果。代码优化将下沉操作提取为独立函数heapSink复用。时间复杂度O((n+k)logn),空间O(1)。作者指出该解法未达最优O(n)复杂度,需用快速选择算法改进。关键收获:1)堆操作的核心是下沉逻辑复用;2)高效实现需采用快速选择而非堆排序。
2025-09-15 10:53:18
272
原创 Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
本文主要介绍了TextMeshPro(TMP)的基础设置与使用技巧。内容涵盖:1)TMP基础参数配置,包括字体资源、默认设置和排版规则;2)SDF材质渲染技术及其参数调节方法;3)TMP_TextEventHandler组件的事件监听功能;4)TMP_TextUtilities工具类的点击事件处理方法。通过合理配置这些功能,可以优化文本显示效果,实现交互式文本功能,提升开发效率。文章最后总结了TMP在项目设置、渲染效果和工具类应用方面的优势和使用场景。
2025-09-14 20:36:08
1453
原创 Unity学习----【进阶】TextMeshPro学习(二)--进阶知识点(样式表,颜色渐变预设,精灵图片资源)
①样式表其实就是封装了一次的富文本表情②颜色预设是一个配置文件,可以帮助我们提前设置好渐变颜色并复用到多个文本上③精灵图片资源可以帮助我们实现图文混排,但是有时候可能位置有所偏移,这个时候需要我们去精灵图片资源的字形表中进行调整。
2025-09-13 17:59:21
1084
原创 Unity学习----【进阶】TextMeshPro学习(一)--基础知识点
本文总结了Unity中TextMeshPro(TMP)的使用要点:1. TMP是传统Text控件的升级替代,需要手动导入资源包;2. 详细介绍UI文本控件的参数设置(字体、颜色、布局、溢出处理等)和脚本控制方法;3. 对比3D文本控件与UI文本控件的区别;4. 字体资源创建流程及参数配置;5. 常用富文本标签的使用方法。TMP提供更清晰的文本渲染和更丰富的功能,是Unity文本显示的首选方案。
2025-09-12 21:05:30
1105
原创 LeetCode刷题记录----84. 柱状图中最大的矩形(Hard)
这篇题解详细分析了求解柱状图最大矩形面积的三种方法:暴力枚举宽度法(O(n²))、暴力枚举高度法(O(n²))和优化的单调栈解法(O(n))。重点介绍了单调栈解法,通过在数组两端添加哨兵值简化边界条件处理,实现了高效计算。核心思路是维护一个单调递增栈,遇到较小元素时弹出栈顶计算面积,最终得到最大矩形面积。该方法巧妙利用了后进先出的特性,将时间复杂度优化至线性级别。
2025-09-12 12:16:03
1263
原创 LeetCode刷题记录----739.每日温度(Medium)
本文探讨了求解每日温度问题的三种算法:1.暴力解法(O(n²)时间复杂度,会超时);2.优化暴力解法(利用温度范围特性,O(n)时间);3.单调栈解法(最优解,O(n)时间)。重点分析了单调栈的实现原理:维护递减栈,遇到高温时弹出栈顶并计算天数差。文章强调了利用题目限制条件优化算法的重要性,并指出在需要比较索引和值时,单调栈是一种高效解决方案。
2025-09-11 10:59:52
1057
原创 LeetCode刷题记录----394.字符串解码(Medium)
摘要:本文介绍了一种使用栈结构解决字符串解码问题的方法。该算法通过维护字符栈和数字栈,逐个处理输入字符:遇到数字时拼接数字串,遇到'['时将数字压栈,遇到字母直接压栈,遇到']'时弹出字符直到'[',并根据数字栈中的重复次数拼接字符串后重新压栈。最终从字符栈中逆序拼接得到解码结果。该方法时间复杂度O(S),空间复杂度O(S),其中S为解码后字符串长度。关键点在于利用栈的后进先出特性处理嵌套括号,并注意字符拼接顺序。
2025-09-10 10:11:31
436
原创 Unity学习----【进阶】Input System学习(四)--了解PlayerInputManager和一些其他的知识
本文介绍了Unity中PlayerInputManager组件的功能与使用方法。该组件用于管理多设备输入时的玩家加入/离开,支持自动分屏和设备分配。主要内容包括:1)组件参数配置,如通知模式、加入方式、玩家预制体要求等;2)使用步骤,需提前配置玩家输入和摄像机;3)On-Screen组件实现屏幕虚拟摇杆/按键;4)提供改键方案思路,通过修改配置文件动态调整按键绑定。该组件能方便实现单机多玩家功能,需注意玩家预制体需包含PlayerInput组件并正确配置输入设备和摄像机。
2025-09-09 07:15:00
749
原创 Unity学习----【进阶】Input System学习(三)--输入配置文件与PlayerInput
本文介绍了Unity输入配置文件的创建与使用方法。主要内容包括:1.输入配置文件是多个InputAction的集合,可通过Json文件配置;2.创建和配置输入文件的方法,包括动作映射和按键绑定;3.使用方式:生成C#文件后实例化使用,或通过PlayerInput组件自动解析;4.PlayerInput的三种执行模式(消息发送、Unity事件、C#事件)及对应的函数编写方式。PlayerInput简化了输入处理流程,让开发者能更专注于输入事件后的逻辑实现。
2025-09-09 07:00:00
1582
原创 LeetCode刷题记录----155.最小栈(Medium)
本文探讨了实现最小栈的两种方法。第一种使用双向链表结构,维护一个指向当前最小值的指针,在入栈和出栈时动态更新该指针。第二种更简洁的方法是使用两个栈:主栈负责常规操作,辅助栈同步存储当前最小值。两种方法的关键都在于以O(1)时间复杂度获取最小值,同时满足栈的基本操作要求。分析表明,双栈法实现更简洁,两种方法的时间复杂度均为O(1),空间复杂度为O(N)。该问题展示了在数据结构设计中如何通过辅助结构来优化特定操作的性能。
2025-09-08 09:50:43
737
原创 Unity学习----【进阶】Input System学习(二)--认识Input Action
本文摘要: 文章介绍了Unity的InputSystem中的InputAction类,它封装了输入动作,允许在Inspector窗口直接配置输入方式而无需编写代码。主要功能包括:1.声明InputAction后绑定按键和输入类型;2.参数设置(ActionType、Interactions、Processors等);3.按键绑定操作;4.使用前需启用并绑定事件或直接获取数值;5.可自定义交互方式参数。InputAction简化了输入处理,使开发者更专注于触发后的逻辑。后续可通过配置文件进一步优化输入绑定管理
2025-09-08 08:00:00
1528
原创 Unity学习----【进阶】Input System学习(一)--导入与基础的设备调用API
Unity的InputSystem是新版输入系统,相比旧系统更先进易用。它允许在代码外配置输入判断,支持多种设备如键盘、鼠标、手柄等。安装后可在Player设置切换新旧系统。InputSystem提供直接访问设备按键状态的方法,如wasPressedThisFrame检测按键按下,并能获取鼠标位置、滚轮值等数据。该系统完全替代旧输入系统,让开发者更专注于输入后的逻辑处理,同时为后续配置按键功能奠定基础。
2025-09-07 20:02:01
774
原创 LeetCode刷题记录----20.有效的括号(Easy)
本文介绍了使用栈结构解决括号匹配问题的两种方法。第一种方法通过遍历字符串,将左括号入栈,遇到右括号时与栈顶元素匹配,最终检查栈是否为空。第二种方法优化了过程:先排除奇数长度字符串,使用哈希表存储括号对,简化匹配逻辑。两种方法的时间复杂度均为O(N),第二种方法的空间复杂度稍高(O(N+字符集长度))。文章总结了C++中栈的使用技巧,并建议利用哈希表提高代码可读性。核心思路是利用栈的后进先出特性来实现括号的即时匹配。
2025-09-07 19:29:52
526
原创 LeetCode刷题记录----4.寻找两个正序数组的中位数(Hard)
【摘要】该算法通过二分查找在两个有序数组中高效寻找中位数。核心思路是将问题转化为查找第k小的元素:1)根据数组总长度奇偶性确定需要查找的元素位置;2)实现getMinKNum函数,通过比较两数组k/2处的值来排除不可能的元素区间;3)使用指针动态调整搜索范围。该方法时间复杂度为O(log(m+n)),空间复杂度O(1)。关键点在于将中位数问题转化为第k小元素查找,并利用二分思想逐步缩小搜索范围,通过指针更新模拟排除过程。
2025-09-06 11:51:02
965
原创 Unity学习----【进阶】Addressables(二)--加载资源与打包及更新
本文介绍了Unity中Addressables资源管理系统的核心用法,主要包括:1.资源加载方式:通过名称/标签加载单个资源(LoadAssetAsync)或多个资源(LoadAssetsAsync),支持场景加载;2.打包与部署:本地/远程AB包生成路径配置,推荐使用HFS工具测试远程加载;3.更新机制:远程包可单独更新资源而无需重新构建项目,支持差异更新策略;4.最佳实践:资源分组建议、依赖管理技巧及加载句柄的释放时机。系统能有效管理资源加载与更新,特别适合需要热更的项目。
2025-09-05 11:32:50
1683
原创 LeetCode刷题记录----153.寻找旋转排序数组中的最小值(Medium)
文章摘要:本文探讨旋转排序数组中寻找最小值的二分查找方法。初始方案通过比较左右区间有序性,记录可能的最小值;优化方案则优先判断右区间有序性,直接收缩边界确保最小值在区间内。两种方法时间复杂度均为O(logN),空间复杂度O(1)。关键点在于:1)利用有序区间特性;2)合理设置边界更新条件。优化方案通过调整判断顺序简化了比较过程,最终收敛点即为最小值。(149字)
2025-09-05 10:03:05
463
原创 LeetCode刷题记录----33.搜索旋转排序数组(Medium)
文章摘要:该文介绍了在旋转有序数组中查找目标值的二分查找方法。核心思路是通过比较中间值与边界值来判定有序区间,再判断目标值是否在该区间内来调整搜索范围。算法步骤包括:初始化边界、计算中间值、判断有序区间、调整搜索范围,时间复杂度为O(logN),空间复杂度O(1)。关键点在于识别有序部分并确定目标值所在区间。
2025-09-04 10:14:20
418
原创 Unity学习----【进阶】Addressables(一)--概述与简单的使用
本文介绍了Unity中的Addressable资源管理系统,包括其作为AssetBundle高级封装的特性。主要内容涵盖:1)Addressable的基础概念和导入方法;2)资源管理方式,包括分组和两种添加资源的方法;3)代码实现部分,详细说明了各类资源引用的声明方式和使用方法,特别是异步加载资源的实现;4)总结了Addressable的优势和注意事项。文章提供了完整的资源管理解决方案,从配置到代码实现,帮助开发者更高效地管理Unity项目资源。
2025-09-03 16:41:42
1058
原创 Unity学习----【数据持久化】二进制数据(五)--由Excel自动生成数据结构类与二进制文件
本文介绍了在Unity中读取Excel表格并自动生成数据结构类的完整流程。主要内容包括:1. 使用ExcelReader插件读取Excel数据,转化为DataSet类型;2. 根据自定义规则自动生成数据结构类和数据容器类;3. 将Excel数据转换为二进制文件存储;4. 通过反射机制实现数据加载和访问。该方案实现了Excel数据到Unity游戏数据的自动化转换,提高了开发效率,适用于游戏配置管理等场景。
2025-09-02 15:58:32
1169
原创 LeetCode刷题记录----34.在排序数组中查找元素的第一个和最后一个位置(Medium)
本文探讨了使用二分查找算法在有序数组中查找目标值范围的优化方法。初版方案采用常规二分查找找到目标值后线性扩展边界,时间复杂度为O(N)。优化方案通过设计两种二分查找条件:查找第一个大于等于target的索引(left)和第一个大于target的索引(right-1),将时间复杂度降为O(logN)。关键点在于:1) 通过调整二分条件实现不同边界的查找;2) 最终验证left<=right且对应位置均为目标值。该方案充分利用了二分查找的特性,避免了线性搜索,显著提升了效率。
2025-09-02 10:33:57
573
原创 LeetCode刷题记录----74.搜索二维矩阵(Medium)
本文提出两种在有序矩阵中查找目标值的二分查找方法。第一种方法将二维矩阵虚拟为一维数组,通过数学转换计算行列索引,时间复杂度O(logmn)。第二种方法利用矩阵特性分两步查找:先用upper_bound定位目标行,再用binary_search在该行查找,时间复杂度O(logm+logn)。两种方法空间复杂度均为O(1)。文章还总结了C++中upper_bound和binary_search的用法差异,以及lambda表达式的语法。
2025-09-01 09:33:24
459
原创 Unity学习----【数据持久化】二进制存储(四)--序列化与反序列化
本文介绍了C#中对象序列化和反序列化的基本方法。主要内容包括:1)给需要序列化的类添加[System.Serializable]特性;2)使用MemoryStream和BinaryFormatter进行二进制序列化,将对象存入内存或文件;3)反序列化时通过FileStream或MemoryStream还原对象;4)演示了利用内存流进行简单异或加密的方法。关键点在于二进制格式化程序的使用,以及内存流和文件流的选择——内存流便于数据加密处理,文件流适合直接存储。文章还强调了资源释放和使用using语句的重要性。
2025-09-01 08:00:00
1106
原创 Unity学习----【数据持久化】二进制存储(三)--文件夹操作
本文总结了C#中文件夹操作的基本方法,主要包括:1)判断文件夹存在(Directory.Exists);2)创建文件夹(Directory.CreateDirectory返回DirectoryInfo);3)删除文件夹(Directory.Delete);4)查找文件夹和文件(GetDirectories/GetFiles);5)移动文件夹(Directory.Move)。同时介绍了DirectoryInfo类的用法,包括获取文件夹路径、名称、子文件夹和文件信息等。文章强调文件夹操作的核心是通过代码实现增删
2025-08-31 19:53:21
522
原创 Unity学习----【数据持久化】二进制存储(二)--文件流
本文介绍了C#文件流(FileStream)的基本概念和使用方法。主要内容包括:1.文件流的创建方式,包括FileStream构造函数、File.Create和File.Open三种方法,以及不同文件模式(FileMode)和访问权限(FileAccess)的说明;2.文件流的重要属性和方法,如Length、CanRead/CanWrite等,强调使用后必须Close和Dispose的重要性;3.字节写入操作,包括基本数据类型和字符串的写入方法,注意写入字符串时需要先存储长度;4.字节读取操作,可逐个读取或
2025-08-31 19:37:43
865
原创 LeetCode刷题记录----51.N皇后(Hard)
本文提出了一种基于递归回溯的N皇后问题求解方法。通过维护二维数组记录每个格子被攻击的次数,实现棋盘状态的动态更新。算法按行放置皇后,对每行遍历所有列位置,若未被攻击则放置皇后并更新影响范围,递归处理下一行后回溯撤销影响。时间复杂度为O(N!×N²),空间复杂度O(N²)。文章还分析了斜线位置的更新方法,并指出可通过哈希表进一步优化空间至O(N)。该方案的关键在于正确处理放置皇后时的攻击范围标记和回溯时的状态恢复。
2025-08-30 11:18:18
911
原创 Unity学习----【数据持久化】二进制存储(一)
①二进制存储相对Json和XML这些把数据转化为字符串来存储与读取的方式更加安全且高效②变量是占不同字节数的,可以用API把它们转化为相应的字节数组,数组的长度等于变量占用的字节数(比如Int占四位,所以字节变量的长度是四位,一位字节对应八位比特)。同时也可以通过API把字节数组转化为相应的变量值③对于字符变量的转化,我们在编码和解码的时候都需要给他指定相应的字符格式(一般我们都用UTF-8即可)
2025-08-29 20:37:24
1157
3
原创 LeetCode刷题记录----131.分割回文串(Medium)
本文探讨了分割回文串问题的解法。通过递归回溯枚举所有可能的字符串分割方案,并利用双指针或动态规划优化回文判断。核心思路是:1)递归遍历字符串,逐步构建分割方案;2)当分割出的子串均为回文时保存方案。优化方法包括预处理动态规划数组dp[i][j]记录子串是否为回文,或采用记忆化搜索。算法时间复杂度为O(n·2^n),空间复杂度O(n^2)。解题关键在于将枚举分割方案与高效回文验证相结合。
2025-08-29 11:56:35
1012
原创 LeetCode刷题记录----35.搜索插入位置(Easy)
本文介绍了使用二分查找算法在有序数组中定位目标值或确定其插入位置的方法。通过定义左右边界并计算中间索引mid,逐步缩小搜索范围。当找到目标值时返回其索引,未找到时left指针恰好指向应插入的位置。算法时间复杂度为O(logn),空间复杂度O(1)。关键点在于:1)有序数组检索可考虑二分查找;2)未找到目标值时,left指针自动指向正确的插入位置。
2025-08-28 20:31:57
537
原创 LeetCode刷题记录----79.单词搜索(Medium)
该文章探讨了在矩阵中搜索单词的深度优先搜索算法。首先通过回溯法在矩阵中匹配单词首字母,然后递归搜索四个方向。初始方案使用访问标记数组,时间复杂度O(mn4^L),空间复杂度O(mn+L)。优化方案包括:1)在原矩阵上标记访问状态;2)预处理检查字符频率。优化后空间复杂度降至O(L)。核心思路是:1)DFS回溯处理矩阵搜索;2)预处理可提前排除无效情况。两种方案的时间复杂度相同,但优化方案显著减少了空间消耗。
2025-08-27 10:56:52
366
原创 LeetCode刷题记录----22.括号生成(Medium)
本文探讨了生成所有合法括号组合的算法。通过递归回溯方法,在生成过程中实时判断括号合法性:左括号优先添加,右括号添加需满足剩余右括号数多于左括号数。时间复杂度为卡特兰数级别,空间复杂度O(N)。文章还提出了分治法优化思路,将合法括号分解为(A)B形式,利用动态规划缓存中间结果。此外介绍了暴力生成所有可能再验证合法性的朴素方法。总结指出:1)递归回溯加条件判断能高效解决问题;2)分治法适用于具有可分解结构的问题;3)指针可优化大量容器的存储;4)智能指针有助于内存管理。
2025-08-26 11:50:14
829
原创 LeetCode刷题记录----39.组合总和(Medium)
本文介绍了使用回溯算法解决组合总和问题的思路。通过递归遍历候选数组,在每一步选择数字并更新剩余目标值,当目标值减至0时记录有效组合。初始解法时间复杂度为O(n²target),空间复杂度为O(target/m)。优化方案先对数组排序,在递归过程中进行剪枝处理,当剩余目标值小于当前候选数时直接终止该分支,将时间复杂度优化为O(nlogn + KL)。文章强调回溯法适用于寻找所有可能解的问题,建议通过手动排列示例寻找规律,并指出合理剪枝能有效提升算法效率。
2025-08-25 10:52:15
1024
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人