
数据结构和算法
文章平均质量分 70
呢喃coding
个人邮箱 : 1425809544@qq.com
手机号 : 13269918057
微信号 : wangzhezhilv0
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode经典题解:141、判断链表是否有环
链表是由节点通过next指针连接而成的数据结构。如果链表的末尾节点指向了链表中的某个中间节点(形成一个循环),则称这个链表存在环。↑ ↓←-----←节点4的next指针指向了节点2,形成一个环。判断链表环的「龟兔赛跑法」是面试必背技巧,记住口诀和场景,代码可以直接默写。这个算法不仅高效,还能延伸到其他链表问题(如找环入口、链表中点等)。面试前用示例链表手动模拟一次,确保万无一失!原创 2025-07-17 00:00:00 · 660 阅读 · 0 评论 -
LeetCode经典题解:206、两数之和(Two Sum)
摘要:反转链表是算法面试高频题,本文提供3步口诀+1个场景的简易记忆法。将链表想象成手拉手队伍,用"存下一个、指向前一个、双指针前移"三步实现反转。迭代法只需3个指针,时间复杂度O(n),空间复杂度O(1),面试时通过"手拉手转身"场景和口诀能快速推导代码逻辑,避免死记硬背。记住初始条件、循环条件和三步操作即可轻松应对。原创 2025-07-15 00:00:00 · 337 阅读 · 0 评论 -
LeetCode经典题解:21、合并两个有序链表
本文介绍了合并两个有序链表的经典解法——"哨兵+双指针"迭代法。通过生动的队伍合并比喻,将算法分解为:1)哨兵节点固定起点;2)双指针比较当前节点大小;3)将较小节点接入新链表;4)移动相应指针。该方法时间复杂度O(n+m),空间复杂度O(1),逻辑直观高效。文章还提供了记忆口诀"比大小,接尾巴,指针移"和代码实现,帮助读者快速掌握这一面试高频考点。原创 2025-07-14 00:00:00 · 297 阅读 · 0 评论 -
LeetCode经典题解:3、无重复字符的最长子串
本文介绍了LeetCode高频题"无重复字符的最长子串"的Java解法。通过滑动窗口和哈希表技术实现O(n)时间复杂度,并用"抓娃娃机"场景形象化解释算法逻辑。文章提供了完整代码实现、优化建议(用数组替代哈希表)和示例演示,帮助读者掌握核心口诀:"右指针扫字符,哈希表记位置,重复就把左指针右移,随时算最长距离"。这种把算法与生活场景结合的记忆方法,让复杂问题变得易于理解和应用。原创 2025-07-13 00:00:00 · 792 阅读 · 0 评论 -
LeetCode经典题解:128、最长连续序列
本文探讨了如何高效求解“最长连续序列”问题。首先分析了暴力法(O(n³))和排序法(O(n log n))的不足,随后提出基于哈希表的最优解法(O(n))。其核心在于:1)利用哈希表快速查询元素;2)仅从序列起点(即x-1不存在的x)开始向后扩展计数,避免重复计算。文章通过“寻宝游戏”的类比形象化记忆这一逻辑:哈希表作为地图标记数字,只从“特殊宝藏”(序列起点)开始挖掘。这种方法不仅满足时间复杂度要求,还能灵活处理变种问题。原创 2025-07-12 00:00:00 · 846 阅读 · 1 评论 -
LeetCode经典题解:49、字母异位词分组
字母异位词分组”是哈希表应用的经典题目,解法思路清晰但细节易混。本文用“场景化记忆法”帮你吃透解法,从代码逻辑到记忆技巧一网打尽。原创 2025-07-11 00:00:00 · 495 阅读 · 0 评论 -
LeetCode经典题解:1、两数之和(Two Sum)
《LeetCode两数之和高效解法解析》摘要:本文详解经典算法题"两数之和"的最优解法,通过哈希表实现O(n)时间复杂度。核心思路是遍历数组时,用哈希表记录已访问数字及其下标,同时查询当前数字的补数(target-nums[i])是否存在表中。相比暴力解法O(n²)的耗时,哈希表以空间换时间显著提升效率。文章还提供"侦探破案"场景化记忆技巧,帮助理解算法逻辑,并建议拓展练习有序数组、二叉搜索树等变种题目。掌握这种"空间换时间"的优化思维,比单纯记忆原创 2025-07-10 00:00:00 · 574 阅读 · 0 评论 -
三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串
1、使用 lock锁public class ThreeThreadPrint { //三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串 private static ReentrantLock lock = new ReentrantLock(); private static volatile int state = 0; private static volatile int n = 2;原创 2022-03-19 11:15:05 · 652 阅读 · 0 评论 -
两个线程交替打印1-100
1、使用synchronize 的wait 和notify 控制 //private static volatile int total = 100; private static volatile int count = 1; private static Object object = new Object(); private static void useSyn() { Thread t1 = new Thread(() -> {原创 2022-03-19 07:32:42 · 743 阅读 · 0 评论 -
java使用循环和递归实现二分查找
1.二分查找:渐进时间复杂度 :它的时间复杂度是 O(logn)。2. 使用场景:二分查找依赖的是顺序表结构,简单点说就是数组;二分查找针对的是有序数据,二分查找只能用在插入、删除操作不频繁;数据量太小不适合二分查找;数据量太大也不适合二分查找,二分查找的底层需要依赖数组这种数据结构,而数组为了支持随机访问的特性,要求内存空间连续,对内存的要求比较苛刻。3. 代码实现:pa...原创 2019-10-23 11:00:41 · 280 阅读 · 0 评论