- 博客(28)
- 收藏
- 关注

原创 【LeetCode 1695. 删除子数组的最大得分】解析
本文讲解了如何利用滑动窗口算法解决LeetCode 1695题——删除子数组的最大得分问题。题目要求找到元素各不相同的连续子数组,使其元素和最大。通过将数组比作矿脉,使用左右指针构建可伸缩的"探索框",配合哈希集合快速检测重复元素,在O(N)时间复杂度内求解。关键点包括:使用while循环确保窗口纯净、实时更新最大和、注意数值溢出问题。该算法避免了暴力解法的高复杂度,是滑动窗口应用的经典范例。
2025-07-22 11:57:52
194
原创 【LeetCode 1957. 删除字符使字符串变好】解析
本文介绍了如何通过删除最少字符使字符串不包含三个连续相同字符。通过“质检员”的比喻,讲解了三种解法:1)使用StringBuilder作为动态容器,检查新字符是否与前两个构成三连;2)双指针原地修改原字符串;3)计数器法记录连续相同字符数量。三种方法均只需一次遍历,时间O(n),空间O(n)或O(1),核心思路都是根据简单规则过滤字符。实现上各有特点,StringBuilder版最直观,双指针版最省空间,计数器版最简洁。这道题考察了基础的字符串处理能力和编程思维。
2025-07-21 09:12:48
397
原创 【LeetCode 2163. 删除元素后和的最小差值】解析
题目要求在删除n个元素后,将剩余2n个元素分成两部分,使得sumfirst-sumsecond的差值最小。关键在于通过前后缀分解和优先队列技术高效求解:1) 使用大顶堆计算前缀中的最小n个元素之和;2) 使用小顶堆计算后缀中的最大n个元素之和;3) 遍历所有可能的分割点,求取最小差值。该方法的时间复杂度为O(nlogn),空间复杂度O(n)。
2025-07-18 11:18:47
878
原创 【LeetCode 3202. 找出有效子序列的最大长度 II】解析
这道题目要求找到满足特定模和条件的最长子序列。核心思路是通过动态规划记录以不同余数结尾的有效子序列长度。具体来说,对于每个元素,计算其对k的余数x,然后遍历所有可能的“等和模”target j,找到能接在x前面的余数prev_rem,使得(prev_rem+x)%k=j。通过维护一个二维DP表dp[j][rem]来记录在等和模为j时以rem结尾的最长子序列长度,最终取整个DP表中的最大值作为答案。该算法巧妙地将复杂条件转化为基于余数的状态转移,时间复杂度为O(n*k),适用于给定的数据范围。
2025-07-17 10:09:20
733
原创 【LeetCode 3201. 找出有效子序列的最大长度 I】解析
本文解析了LeetCode题目3201,探讨如何找出整数数组中最长的有效子序列。有效子序列定义为相邻元素之和的奇偶性相同。通过分析奇偶性组合,发现最长有效子序列只可能来自四种简单模式:全奇数、全偶数、奇偶交替或偶奇交替。因此,只需统计原数组中奇偶数的数量,并计算两种交替模式的最大长度,最后取四者中的最大值即可。该解法时间复杂度为O(n),空间复杂度O(1),通过一次遍历即可完成所有计算。
2025-07-16 13:18:17
912
原创 【LeetCode 3136. 有效单词】解析
这篇文章讲解了一道LeetCode题目"有效单词"的解题思路。题目要求判断字符串是否符合4个条件:长度≥3、仅含字母数字、包含至少1个元音和1个辅音字母。 作者采用"清单核对"和"一票否决"的策略,先检查长度和字符合法性,再遍历统计元音和辅音。提供两种代码实现:常规逻辑使用字符遍历和标记变量;正则表达式版本则更简洁但可读性较差。 文章强调这类问题需要拆解
2025-07-15 10:29:07
745
原创 【LeetCode 1290. 二进制链表转整数】解析
摘要:LeetCode 1290题要求将二进制链表转换为十进制整数。文章介绍了两种解法:1)朴素的两趟遍历法,先存储二进制位再计算;2)更优的位运算方法,通过左移和或运算实时计算结果。最优解法只需遍历链表一次,时间复杂度O(n),空间复杂度O(1),体现了二进制运算的高效性。代码实现展示了两种思路的对比,重点推荐了使用位运算的简洁高效方案。
2025-07-14 08:40:14
759
原创 【LeetCode 3169. 无需开会的工作日】解析
题目要求计算员工没有安排会议的工作天数。给定总天数days和会议区间数组meetings,可能存在区间重叠。 解题思路采用区间合并方法: 将会议按开始时间排序 遍历会议区间,合并重叠区间 计算所有合并后会议区间占用的总天数 用总天数减去会议天数得到空闲天数 关键点在于处理重叠区间时实时更新当前合并区间的右边界。最终时间复杂度为O(nlogn),主要来自排序操作。 示例:当days=10,meetings=[[5,7],[1,3],[9,10]]时,合并后的会议区间为[1,3]、[5,7]、[9,10],空闲
2025-07-11 10:10:04
1195
原创 【LeetCode 3440. 重新安排会议得到最多空余时间 II】解析
本文探讨了如何通过调整最多一个会议的时间来最大化活动中的连续空闲时段。关键点在于:1)会议顺序可以改变;2)移动一个会议后,其原有位置会与相邻空闲合并形成更大空隙。解决方案包括:计算原始最大空闲时段;遍历每个会议,检查其能否被移动至其他空隙,并计算可能产生的新空闲长度。最终通过左右两次遍历确保覆盖所有可能的最大空闲情况。该方法时间复杂度为O(N),高效可靠。示例分析展示了不同场景下的最优调整策略。
2025-07-10 13:13:30
819
原创 【LeetCode 3439. 重新安排会议得到最多空余时间 I】解析
本文解析了LeetCode 3439题「重新安排会议得到最多空余时间 I」的解题思路。题目要求在给定活动总时长和若干会议安排的情况下,通过最多平移k个会议来最大化相邻会议之间的最长连续空余时间。关键在于将"移动会议"的操作转化为"合并空隙"的问题,即每次移动相当于消灭一个空隙并将其长度转移到相邻空隙。最终问题简化为寻找k+1个连续空隙的最大和,可用滑动窗口算法高效解决。时间复杂度为O(n),空间复杂度O(1)。这个解法通过巧妙的思维转换,将看似复杂的问题转化为经典算法
2025-07-09 14:01:10
797
原创 【LeetCode 1751. 最多可以参加的会议数目 II】解析
本文解析了LeetCode 1751题"最多可以参加的会议数目II"的解题思路。题目要求从多个会议中选择最多k个不冲突的会议,使总价值最大。解题采用动态规划方法:首先按结束时间排序会议;然后构建DP表,其中dp[i][j]表示前i个会议选j个的最大价值;最后通过二分查找快速确定不冲突的会议边界。算法时间复杂度为O(N log N + N*k),通过排序和动态规划实现了最优解的高效计算。关键点在于会议排序和状态转移方程的设计,使问题复杂度从指数级降至多项式级别。
2025-07-08 22:30:27
876
原创 【LeetCode 1353. 最多可以参加的会议数目】解析
本文解析了LeetCode 1353题"最多可以参加的会议数目"的贪心解法。通过时间流逝模拟法,每天从当前可参加的会议中选择结束最早的会议参加,最大化参会数量。实现上使用最小堆高效管理候选会议,时间复杂度O(N+DlogN),空间复杂度O(N)。该方法通过每日动态决策,避免了传统排序策略的三大陷阱,展现了贪心算法的精妙之处。
2025-07-07 22:17:42
625
原创 详解Character中的相关code-point方法
详解Character中的相关code-point方法缘由Unicode和Code-point的关系APICharacter.codePointCountCharacter.codePointAt缘由在java中有许多针对code-point的相关方法,由于工作需要,对部分常用的code-point方法进行记录下。Unicode和Code-point的关系“一个普通字符是一位,一个emoji表情是两位。Mysql应该用utf8mb4存储emoji,而不应该用utf8”这是大多数人真正意义上去了解到u
2020-07-20 15:17:21
2579
原创 jvm选项-Xlint:fallthrough
jvm选项-Xlint:fallthrough说明使用场景举例说明说明在运行JAVA程序时,Xlint通常用于打开JVM的审计规则,今天在看到一个java程序运行前的编译加上了fallthrough选项,忘记了具体含义,用于记录一下。使用场景如果在程序中的switch-case语句出现了fall-through情况,而又希望在编译时就发现从而警告,就需要fallthrough审计了。举例switch (checkItem){ case 1: //do something.
2020-07-14 17:38:07
561
原创 Arrays中的toString和deepToString
Arrays中的toString和deepToString说明Arrays.toString源码解析结语Arrays.deepToString源码解析结语说明在某些情况下,我们需要将数组显示或打印出来,部分情况下,我们可以借用JSON或者XML工具类将数组打印出来,但Java本身提供了数组打印的方法,由于本身记忆力不深,所以记录一下Arrays.toString源码public static String toString(Object[] a) { if (a == null)
2020-07-14 17:24:30
524
原创 JAVA源码解析(11)-java.beans.XMLEncoder、java.beans.XMLDecoder(一)
java版本:1.8 作者出于学习阶段,如有问题,欢迎多多提出。XMLEncoder目前用的比较多的是用来将Java Bean 和 XML的互相转换。让我们先看一下XMLEncoder和XMLDecoder的用法:public class XMLUtils { /** * 读取XML文件并返回相应的对象 * * @param objSource 输出文件的路径
2017-06-21 17:39:57
981
原创 JAVA源码解析(10)-java.beans.Encoder、java.beans.MetaData、java.beans.ExceptionListener
作者处于学习阶段,如有不对请指正。来自API的解释:Encoder 是这样的类,它可用于创建根据其公共 API 对 JavaBeans 集合状态进行编码的文件或流。Encoder 结合其持久委托,负责将对象图形拆分成一系列可用于创建它的 Statements 和 Expression。子类通常使用某种可读形式(比如 Java 源代码或 XML)提供这些表达式的语法。一个个方法来解析: protec
2017-06-15 14:01:43
564
原创 JAVA源码解析(9)-java.beans.DefaultPersistenceDelegate
作者出于学习阶段,如有不对请指正DefaultPersistenceDelegate继承自PersistenceDelegate。如果需要(或选择)为 bean 提供持久委托,则可以通过使用 DefaultPersistenceDelegate 实例或通过创建自己的 PersistenceDelegate 子类来实现。如果 bean 需要持久委托的惟一原因是因为用户想调用 bean 使用属性值作为参
2017-06-12 17:59:22
342
原创 JAVA源码解析(8)-java.beans.PersistenceDelegate
作者出于学习阶段,如有不正确的地方请指正。PersistenceDelegate是一个抽象类,包含了四个方法,没有什么可以详细说明的地方,具体的东西都在子类当中,当前类中的writeObject方法也只是一个持久化的入口。以下是API的解释:writeObjectpublic void writeObject(Object oldInstance,Encoder out)writeObject
2017-06-12 11:24:41
465
原创 JAVA源码解析(7)-java.beans.IndexedPropertyDescriptor
Jdk版本:1.8.0_131 作者出于学习阶段,如有问题请指正来自API的解释:IndexedPropertyDescriptor描述了一个像数组一样的属性,并且具有索引的读取和/或索引的写入方法来访问数组的特定元素。 索引属性还可以提供简单的非索引读写方法。 如果这些存在,它们读取和写入由索引读取方法返回的类型的数组。当前类和PropertyDescriptor的作用很相似,但是Propert
2017-06-08 14:10:52
753
原创 JAVA源码解析(6)-java.beans.PropertyDescriptor
Jdk版本:1.8.0_131 作者出于学习阶段,如有问题请指正来自API的解释:PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。PropertyDescriptor有一个常用的功能:包装一个属性的Get、Set方法,通过反射调取相应的方法,举例:构造一个PropertyDescriptor -> 获取get/set方法 -> invoke在整个P
2017-06-06 16:28:31
1504
原创 JAVA源码解析(5)-java.beans.MethodDescriptor、java.beans.MethodRef
本人出于学习阶段,如有不对,请多多指出。API的解释:MethodDescriptor 描述了一种特殊方法,即 Java Bean 支持从其他组件对其进行外部访问。MethodDescriptor和其他的Descriptor一样,其中的特殊知识点仅仅包含了一些常规的引用类(例如弱引用、软引用)知识点。当前类继承自FeatureDescriptor,所以其中的很多一部分方法也是被直接用到,例如getC
2017-05-24 00:47:07
893
原创 JAVA源码解析(4)-java.beans.EventSetDescriptor
此文章的java环境:1.8.0_131 本人出于学习阶段,如有不正请指正来自API的解释:描述给定 Java bean 激发的一组事件的 EventSetDescriptor。给定的事件组都是作为方法调用在单个事件侦听器接口上传递的,事件侦听器对象可以通过调用事件源提供的注册方法进行注册构造器:EventSetDescriptor(Class<?> sourceClass, String eve
2017-05-17 16:30:08
514
原创 JAVA源码解析(3)-java.beans.BeanDescriptor
此文章的java环境:1.8.0_131本人出于学习阶段,如有不正请指正来自API的解释:BeanDescriptor 提供有关 "bean" 的全局信息,其中包括其 Java 类、其 displayName 等等。这是由 BeanInfo 对象返回的描述符种类之一,该对象还返回属性、方法和事件的描述符。getBeanClass() 来自API的解释:得 bean 的 Cl
2017-05-14 22:21:04
1432
原创 JAVA源码解析(2)-java.beans.FeatureDescriptor、
此文章的java环境:1.8.0_131本人出于学习阶段,如有不正请指正由于FeatureDescriptor是基类,所以没有太多和实际相关的用法,比较简单,没有方法需要详细解析 API对该类的描述:FeatureDescriptor 类是 PropertyDescriptor、EventSetDescriptor 和 MethodDescriptor 等的公共基类。它支持
2017-05-14 20:20:59
469
原创 JAVA源码解析(1)-java.beans.Beans、ObjectInputStreamWithLoader、BeansAppletContext、BeansAppletStu
此文章的java环境:1.8.0_131本人出于学习阶段,如有不正请指正方法剖析getInstanceOf(Object bean, Class targetType) 来自API的解释:从给定 bean 中获得表示源对象的指定类型视图的对象。 public static Object getInstanceOf(Object bean, Class targe
2017-05-12 16:37:36
356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人