- 博客(214)
- 收藏
- 关注
原创 Unity【小问题】----URP项目中加载AssetBundle中的预设体即使加载了依赖的材质依然是紫色的问题
本文针对Unity URP项目中,编辑器模式下加载AssetBundle资源时材质显示为紫色的问题提供了解决方案。通过创建一个AssetBundleEditorUtil工具类,在加载GameObject后自动修复Shader引用。该方法遍历预设体中的所有渲染组件(包括Renderer、TextMeshPro、SpriteRenderer等),重新查找并应用正确的Shader,确保编辑器模式下材质正常显示。关键代码在AB包加载完成后调用FixShadersForEditor方法进行Shader修复,既不影响最
2025-12-02 13:41:46
390
原创 LeetCode刷题记录----72.编辑距离(Medium)
本文通过动态规划方法解决编辑距离问题(LeetCode 72题)。解题思路是从字符串末尾开始比较字符,若不相同则进行插入、删除或替换操作。关键点在于发现对word1的修改操作等价于对word2的相应操作,从而简化状态转移方程为dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1。边界条件初始化后,通过二维数组实现状态转移,最终得到最小编辑距离。算法时间复杂度O(MN),空间复杂度O(MN)。总结指出动态规划解题要点:从递归思路出发,识别状态转移条件
2025-10-09 10:23:42
880
原创 LeetCode刷题记录----75.颜色分类
该文章讨论了LeetCode 75题"颜色分类"的三种解法。初始思路是直接使用快速排序(O(nlogn)),但题目只有0/1/2三个元素,因此提出更优解:1)单指针两次扫描法,分别排序0和1;2)双指针首部法,同时处理0和1的交换;3)双指针首尾收缩法,将0交换到头部,2交换到尾部。最优解法时间复杂度均为O(n),空间复杂度O(1)。文章强调对于有限元素的排序问题,可以利用已知元素特性实现更高效的排序算法。
2025-10-01 11:21:02
889
原创 LeetCode刷题记录----31.下一个排序(Medium)
该文章介绍了如何寻找整数数组的下一个字典序排列。解题思路是:1)从后往前找到第一个非降序元素作为较小数;2)在其右侧找到第一个比它大的元素作为较大数;3)交换两者并将较小数后的部分翻转。若整个数组都是降序,则直接翻转整个数组。算法时间复杂度为O(N),空间复杂度为O(1)。核心思想是在保证排列变大的前提下,使变化幅度尽可能小。通过分析相邻排列的差异,找到关键交换点并调整后续元素顺序。
2025-10-01 10:57:31
811
原创 LeetCode刷题记录----169.多数元素(Easy)
本文介绍了两种解决"多数元素"问题的算法。第一种使用哈希表记录元素出现次数,时间和空间复杂度均为O(N)。第二种采用投票计数法,通过维护候选值和计数值,在O(N)时间复杂度和O(1)空间复杂度内解决问题。文章还提到其他可能的解法,如随机选择和分治法。投票法在保持线性时间的同时显著优化了空间复杂度,是更优的解决方案。
2025-09-29 11:56:43
284
原创 LeetCode刷题记录----1143.最长公共子序列(Medium)
【摘要】1143题最长公共子序列采用二维动态规划解法。定义dp[i,j]表示text1前i个字符与text2前j个字符的最长公共子序列长度。边界条件为dp[0,j]=dp[i,0]=0。状态转移分两种情况:当字符匹配时dp[i,j]=dp[i-1,j-1]+1;不匹配时取dp[i-1,j]和dp[i,j-1]的最大值。该算法时间复杂度O(MN),空间复杂度O(MN),是处理字符串公共子序列问题的典型动态规划方法。
2025-09-28 10:17:42
171
原创 LeetCode刷题记录----5.最长回文子串(Medium)
摘要:本文探讨了最长回文子串问题的两种解法。动态规划法通过构建二维数组dp[i][j]记录子串是否为回文,状态转移方程为dp[i][j]=(s[i]==s[j])&&dp[i+1][j-1]。中心扩展法则通过枚举所有可能的回文中心(奇数和偶数长度),向两侧扩展寻找最长回文。两种方法都利用了回文串的特性:首尾字符相同且子串也是回文。动态规划空间复杂度为O(n²),而中心扩展法空间复杂度为O(1)。(149字)
2025-09-27 09:18:56
858
原创 LeetCode刷题记录----62.不同路径(Medium)
本文探讨了LeetCode 62题"不同路径"的三种解法。基础解法使用二维动态规划,记录每个格子的路径数,状态转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-1]。优化解法将空间压缩为一维数组,利用dp[j] += dp[j-1]更新状态。最优解法通过组合数学原理,计算移动次数的组合数C(m+n-2,m-1)。三种方法的时间复杂度分别为O(mn)、O(mn)和O(m),空间复杂度依次优化为O(n)和O(1)。文章强调了动态规划的模式识别和状态压缩技巧,以及数学原
2025-09-26 10:44:43
1249
原创 LeetCode刷题记录----32.最长有效括号(Hard)
本文介绍了使用动态规划求解最长有效括号长度的方法。关键思路是定义dp[i]为以字符s[i]结尾的最长有效括号长度,并分情况处理')'字符:当遇到"()"时,dp[i]=dp[i-2]+2;当遇到"))"时,若匹配到对应的'(',则dp[i]=dp[i-1]+dp[i-dp[i-1]-2]+2。该算法时间复杂度O(n),空间复杂度O(n)。核心启示是:动态规划中子问题的定义要尽可能简单明确,通过限制条件简化状态转移方程的推导。
2025-09-25 10:36:45
641
原创 LeetCode刷题记录----136.只出现一次的数字(Easy)
摘要:题目要求在O(n)时间、O(1)空间内找出数组中仅出现一次的数字。利用异或运算的特性:相同数异或得0,任何数与0异或得本身,且满足交换律。通过遍历数组将所有元素异或,最终结果即为唯一出现一次的数字。该方法高效地满足了题目要求的时间和空间复杂度限制。
2025-09-24 10:52:11
157
原创 LeetCode刷题记录----152.乘积最大子数组(Medium)
摘要:该文介绍了用动态规划求解最大乘积子数组问题。关键点在于同时维护两个状态数组:maxF记录到当前位置的最大乘积,minF记录最小乘积。状态转移时考虑三种情况:延续之前的乘积、重新开始或负负得正。最终在maxF数组中取最大值即为答案。算法时间复杂度O(N),空间复杂度O(N)。核心思想是通过同时跟踪最大最小值来处理元素正负带来的影响。
2025-09-23 11:32:30
411
原创 LeetCode刷题记录----416.分割等和子集(Medium)
该问题考察将数组分割为两个等和子集的可能性。解题思路:1)首先判断总和是否为偶数;2)转化为0-1背包问题,寻找和为sum/2的子集。通过逐步优化,从回溯法到带记忆的DFS,再到二维DP,最终优化为一维DP。关键点:总和必须为偶数;转化为背包问题;优化空间复杂度时需逆向遍历。最优解使用一维DP数组,时间复杂度O(N*target),空间复杂度O(target)。
2025-09-23 11:17:34
1500
原创 LeetCode刷题记录----300.最长递增子序列(Medium)
本文介绍了求解最长递增子序列的动态规划方法。通过定义dp[i]表示以nums[i]结尾的最长子序列长度,初始值设为1。状态转移时,若nums[j]<nums[i](j<i),则更新dp[i]为max(dp[i], dp[j]+1)。最终结果为dp数组中的最大值。该方法时间复杂度为O(n²),空间复杂度为O(n)。关键点在于正确识别状态转移条件(nums[j]<nums[i]),确保子序列严格递增。
2025-09-22 11:41:48
216
原创 LeetCode刷题记录----139.单词拆分(Medium)
该题解使用动态规划解决字符串拆分问题。定义dp[i]表示前i个字符能否被字典中的单词拆分。初始化dp[0]为true(空字符串可拆分)。状态转移时,遍历所有可能的分割点j,若dp[j]为true且子串s[j..i-1]在字典中,则dp[i]=true。使用哈希集合存储字典以提高查询效率。时间复杂度O(n^2),空间复杂度O(n)。关键点在于利用已知子问题结果,避免重复计算,通过分割点将问题分解为两个子问题判断。
2025-09-22 11:27:34
451
原创 LeetCode刷题记录----322.零钱兑换(Medium)
本文探讨了解决零钱兑换问题的两种主要方法:动态规划和记忆化深度优先搜索。动态规划方法通过构建dp数组,其中dp[i]表示凑到金额i所需的最少硬币数,采用状态转移方程dp[i]=min(dp[i],dp[i-coin]+1)进行求解,时间复杂度为O(NAmount)。优化后的动态规划方案避免了预处理硬币数组,直接通过遍历计算状态值。另一种方法是记忆化DFS,通过递归和剪枝来减少重复计算,同样达到O(NAmount)的时间复杂度。文章强调解决此类问题需明确状态定义和转移方程,当问题可分解为子问题时,动态规划或记
2025-09-21 17:36:42
1010
原创 LeetCode刷题记录----279.完全平方数(Medium)
该文探讨了完全平方数问题的两种解法:动态规划和数学优化。动态规划解法通过构建dp数组,记录每个数的最小完全平方数和,时间复杂度O(n√n)。数学优化基于拉格朗日四平方定理,将问题转化为判断数字能否表示为1/2/3/4个平方数之和,时间复杂度降至O(√n)。文章强调了枚举在解决数字相加问题中的重要性,并比较了两种方法的优劣,指出数学方法在效率上的显著优势。
2025-09-20 11:31:44
582
原创 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
443
原创 LeetCode刷题记录----763.划分字母区间(Medium)
【摘要】本文提出两种解决字符串分段问题的算法。第一种采用双遍历法:先统计字母频率,再通过哈希集合动态维护当前片段的字母集合,当集合为空时完成切割。第二种优化为贪心算法:先记录每个字母的最远位置,遍历时动态更新当前能到达的最远位置,到达时进行切割。两种方法时间复杂度均为O(n),但后者空间复杂度优化至O(1)。关键是通过字母的最远位置这一核心特征,将问题转化为类似跳跃游戏的贪心策略。
2025-09-19 10:34:45
611
原创 LeetCode刷题记录----45. 跳跃游戏 II(Medium)
摘要:该文介绍了跳跃游戏II的贪心算法解法。通过动态维护最大可达位置maxCanReach和当前跳跃边界end,在遍历数组时,当到达end位置时触发跳跃,更新end为maxCanReach并增加跳跃计数。算法确保每次跳跃都选择最远可达位置,时间复杂度O(n),空间复杂度O(1)。关键点在于及时更新最大可达位置和准确判断跳跃时机。
2025-09-19 10:16:38
432
原创 LeetCode刷题记录----55.跳跃游戏(Medium)
本文探讨了跳跃游戏问题的两种解法。初始采用递归回溯法,通过遍历所有可能的跳跃路径判断能否到达终点,但时间复杂度高达O(2^n)。随后提出更优的贪心算法,通过维护最远可达位置maxCanReach,在O(n)时间内解决问题。关键点在于:1)递归回溯法虽可行但效率低;2)贪心算法只需跟踪最远可达位置即可判断结果,避免冗余计算。该问题体现了不同算法在解决同一问题时的效率差异,特别是当仅需判断可行性时,贪心算法往往更高效。
2025-09-18 11:06:29
416
原创 LeetCode刷题记录----121.买卖股票的最佳时机(easy)
摘要:本文讨论了股票买卖问题的最优解求法。通过分析暴力解法(O(N^2))和贪心算法(O(N))两种实现,指出贪心算法通过跟踪最低买入价和最大利润来优化效率。代码示例展示了如何用贪心思想在单次遍历中解决问题,强调对于极值类问题应优先考虑贪心策略的优势。
2025-09-18 10:50:20
210
原创 LeetCode刷题记录----295.数据流的中位数(Hard)
本文探讨了LeetCode 295题"数据流的中位数"的解题思路。作者首先尝试了两种超时方法:一是使用单一堆结构,每次查询时弹出半数元素计算中位数;二是维护有序列表,每次插入后进行快速排序。随后提出优化方案:采用大小根堆结合的方式,大根堆存储较小半数数据,小根堆存储较大半数数据,保持两堆元素数量平衡。该方法实现插入操作O(logN)时间复杂度和查询O(1)时间复杂度,空间复杂度O(N)。通过堆顶元素即可快速获取中位数,有效解决了数据流中实时计算中位数的问题。
2025-09-17 11:46:37
536
原创 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
1081
原创 LeetCode刷题记录----215.数组中的第K个最大元素(Medium)(再做一次)
摘要:文章介绍了两种在数组中查找第K大元素的算法。1.优先队列法:构建最小堆,保持堆大小为K,堆顶即为第K大元素,时间复杂度O(nlogk),空间复杂度O(k)。2.快速选择法:基于快速排序的分治思想,通过基准值定位目标元素位置,平均时间复杂度O(n),最坏O(n²)。两种方法各有适用场景:优先队列适合动态维护,快速选择适合固定长度数组的高效查找。
2025-09-16 10:33:04
718
原创 LeetCode刷题记录----215.数组中的第K个最大元素(Medium)
本文通过最大堆实现数组第K大元素查找。首先构建最大堆(从中间节点开始下沉操作),然后执行k-1次删除堆顶元素操作(每次将末尾元素移至堆顶并下沉),最终堆顶即为结果。代码优化将下沉操作提取为独立函数heapSink复用。时间复杂度O((n+k)logn),空间O(1)。作者指出该解法未达最优O(n)复杂度,需用快速选择算法改进。关键收获:1)堆操作的核心是下沉逻辑复用;2)高效实现需采用快速选择而非堆排序。
2025-09-15 10:53:18
304
原创 Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
本文主要介绍了TextMeshPro(TMP)的基础设置与使用技巧。内容涵盖:1)TMP基础参数配置,包括字体资源、默认设置和排版规则;2)SDF材质渲染技术及其参数调节方法;3)TMP_TextEventHandler组件的事件监听功能;4)TMP_TextUtilities工具类的点击事件处理方法。通过合理配置这些功能,可以优化文本显示效果,实现交互式文本功能,提升开发效率。文章最后总结了TMP在项目设置、渲染效果和工具类应用方面的优势和使用场景。
2025-09-14 20:36:08
1907
原创 Unity学习----【进阶】TextMeshPro学习(二)--进阶知识点(样式表,颜色渐变预设,精灵图片资源)
①样式表其实就是封装了一次的富文本表情②颜色预设是一个配置文件,可以帮助我们提前设置好渐变颜色并复用到多个文本上③精灵图片资源可以帮助我们实现图文混排,但是有时候可能位置有所偏移,这个时候需要我们去精灵图片资源的字形表中进行调整。
2025-09-13 17:59:21
1310
原创 Unity学习----【进阶】TextMeshPro学习(一)--基础知识点
本文总结了Unity中TextMeshPro(TMP)的使用要点:1. TMP是传统Text控件的升级替代,需要手动导入资源包;2. 详细介绍UI文本控件的参数设置(字体、颜色、布局、溢出处理等)和脚本控制方法;3. 对比3D文本控件与UI文本控件的区别;4. 字体资源创建流程及参数配置;5. 常用富文本标签的使用方法。TMP提供更清晰的文本渲染和更丰富的功能,是Unity文本显示的首选方案。
2025-09-12 21:05:30
2128
原创 LeetCode刷题记录----84. 柱状图中最大的矩形(Hard)
这篇题解详细分析了求解柱状图最大矩形面积的三种方法:暴力枚举宽度法(O(n²))、暴力枚举高度法(O(n²))和优化的单调栈解法(O(n))。重点介绍了单调栈解法,通过在数组两端添加哨兵值简化边界条件处理,实现了高效计算。核心思路是维护一个单调递增栈,遇到较小元素时弹出栈顶计算面积,最终得到最大矩形面积。该方法巧妙利用了后进先出的特性,将时间复杂度优化至线性级别。
2025-09-12 12:16:03
1325
原创 LeetCode刷题记录----739.每日温度(Medium)
本文探讨了求解每日温度问题的三种算法:1.暴力解法(O(n²)时间复杂度,会超时);2.优化暴力解法(利用温度范围特性,O(n)时间);3.单调栈解法(最优解,O(n)时间)。重点分析了单调栈的实现原理:维护递减栈,遇到高温时弹出栈顶并计算天数差。文章强调了利用题目限制条件优化算法的重要性,并指出在需要比较索引和值时,单调栈是一种高效解决方案。
2025-09-11 10:59:52
1106
原创 LeetCode刷题记录----394.字符串解码(Medium)
摘要:本文介绍了一种使用栈结构解决字符串解码问题的方法。该算法通过维护字符栈和数字栈,逐个处理输入字符:遇到数字时拼接数字串,遇到'['时将数字压栈,遇到字母直接压栈,遇到']'时弹出字符直到'[',并根据数字栈中的重复次数拼接字符串后重新压栈。最终从字符栈中逆序拼接得到解码结果。该方法时间复杂度O(S),空间复杂度O(S),其中S为解码后字符串长度。关键点在于利用栈的后进先出特性处理嵌套括号,并注意字符拼接顺序。
2025-09-10 10:11:31
491
原创 Unity学习----【进阶】Input System学习(四)--了解PlayerInputManager和一些其他的知识
本文介绍了Unity中PlayerInputManager组件的功能与使用方法。该组件用于管理多设备输入时的玩家加入/离开,支持自动分屏和设备分配。主要内容包括:1)组件参数配置,如通知模式、加入方式、玩家预制体要求等;2)使用步骤,需提前配置玩家输入和摄像机;3)On-Screen组件实现屏幕虚拟摇杆/按键;4)提供改键方案思路,通过修改配置文件动态调整按键绑定。该组件能方便实现单机多玩家功能,需注意玩家预制体需包含PlayerInput组件并正确配置输入设备和摄像机。
2025-09-09 07:15:00
840
原创 Unity学习----【进阶】Input System学习(三)--输入配置文件与PlayerInput
本文介绍了Unity输入配置文件的创建与使用方法。主要内容包括:1.输入配置文件是多个InputAction的集合,可通过Json文件配置;2.创建和配置输入文件的方法,包括动作映射和按键绑定;3.使用方式:生成C#文件后实例化使用,或通过PlayerInput组件自动解析;4.PlayerInput的三种执行模式(消息发送、Unity事件、C#事件)及对应的函数编写方式。PlayerInput简化了输入处理流程,让开发者能更专注于输入事件后的逻辑实现。
2025-09-09 07:00:00
1842
原创 LeetCode刷题记录----155.最小栈(Medium)
本文探讨了实现最小栈的两种方法。第一种使用双向链表结构,维护一个指向当前最小值的指针,在入栈和出栈时动态更新该指针。第二种更简洁的方法是使用两个栈:主栈负责常规操作,辅助栈同步存储当前最小值。两种方法的关键都在于以O(1)时间复杂度获取最小值,同时满足栈的基本操作要求。分析表明,双栈法实现更简洁,两种方法的时间复杂度均为O(1),空间复杂度为O(N)。该问题展示了在数据结构设计中如何通过辅助结构来优化特定操作的性能。
2025-09-08 09:50:43
764
原创 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
1852
原创 Unity学习----【进阶】Input System学习(一)--导入与基础的设备调用API
Unity的InputSystem是新版输入系统,相比旧系统更先进易用。它允许在代码外配置输入判断,支持多种设备如键盘、鼠标、手柄等。安装后可在Player设置切换新旧系统。InputSystem提供直接访问设备按键状态的方法,如wasPressedThisFrame检测按键按下,并能获取鼠标位置、滚轮值等数据。该系统完全替代旧输入系统,让开发者更专注于输入后的逻辑处理,同时为后续配置按键功能奠定基础。
2025-09-07 20:02:01
1098
原创 LeetCode刷题记录----20.有效的括号(Easy)
本文介绍了使用栈结构解决括号匹配问题的两种方法。第一种方法通过遍历字符串,将左括号入栈,遇到右括号时与栈顶元素匹配,最终检查栈是否为空。第二种方法优化了过程:先排除奇数长度字符串,使用哈希表存储括号对,简化匹配逻辑。两种方法的时间复杂度均为O(N),第二种方法的空间复杂度稍高(O(N+字符集长度))。文章总结了C++中栈的使用技巧,并建议利用哈希表提高代码可读性。核心思路是利用栈的后进先出特性来实现括号的即时匹配。
2025-09-07 19:29:52
573
原创 LeetCode刷题记录----4.寻找两个正序数组的中位数(Hard)
【摘要】该算法通过二分查找在两个有序数组中高效寻找中位数。核心思路是将问题转化为查找第k小的元素:1)根据数组总长度奇偶性确定需要查找的元素位置;2)实现getMinKNum函数,通过比较两数组k/2处的值来排除不可能的元素区间;3)使用指针动态调整搜索范围。该方法时间复杂度为O(log(m+n)),空间复杂度O(1)。关键点在于将中位数问题转化为第k小元素查找,并利用二分思想逐步缩小搜索范围,通过指针更新模拟排除过程。
2025-09-06 11:51:02
989
原创 Unity学习----【进阶】Addressables(二)--加载资源与打包及更新
本文介绍了Unity中Addressables资源管理系统的核心用法,主要包括:1.资源加载方式:通过名称/标签加载单个资源(LoadAssetAsync)或多个资源(LoadAssetsAsync),支持场景加载;2.打包与部署:本地/远程AB包生成路径配置,推荐使用HFS工具测试远程加载;3.更新机制:远程包可单独更新资源而无需重新构建项目,支持差异更新策略;4.最佳实践:资源分组建议、依赖管理技巧及加载句柄的释放时机。系统能有效管理资源加载与更新,特别适合需要热更的项目。
2025-09-05 11:32:50
2442
1
原创 LeetCode刷题记录----153.寻找旋转排序数组中的最小值(Medium)
文章摘要:本文探讨旋转排序数组中寻找最小值的二分查找方法。初始方案通过比较左右区间有序性,记录可能的最小值;优化方案则优先判断右区间有序性,直接收缩边界确保最小值在区间内。两种方法时间复杂度均为O(logN),空间复杂度O(1)。关键点在于:1)利用有序区间特性;2)合理设置边界更新条件。优化方案通过调整判断顺序简化了比较过程,最终收敛点即为最小值。(149字)
2025-09-05 10:03:05
484
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅