- 博客(14)
- 收藏
- 关注
原创 算法练习 - 贪心算法
本文系统介绍了贪心算法的核心思想与典型应用。贪心算法通过局部最优选择逐步构建全局最优解,适用于具有最优子结构特征的问题。文章详细解析了分发饼干、摆动序列、最大子序和等15个经典LeetCode问题的贪心解法,涵盖排序、区间处理、股票交易等多种类型。每个问题都给出了具体的代码实现和优化思路,如处理平坡情况的摆动序列、利用双覆盖范围的最小跳跃次数等。通过大量实例展示了贪心算法在不同场景下的灵活应用,帮助读者掌握该算法的实现技巧和适用条件。
2025-11-03 16:13:51
770
原创 算法练习 - 回溯
本题使用新的数据结构 set 用来使用到去重逻辑中,因为set不能有重复的元素,因为本题不能重新排序,所以不适用used来去重。N皇后研究的问题是如何将N个皇后放置在nxn的棋盘上,并且使得皇后之间不能相互攻击,给你一个整数n,返回所有不同的n皇后问题。回溯遍历的过程中,遇到的机场个数,如果达到了(航班数 + 1),那么我们就找到了一个行程,把所有的航班串在一起。回溯法也可以叫做回溯搜索法,它是一种搜索的方式,回溯是递归的副产品,只要有递归就会有回溯。剪枝优化:首先要明白i的最大取值是多少?
2025-10-26 14:54:25
1751
原创 算法练习 二叉树-2
本文总结了二叉树和二叉搜索树的常见算法问题及解法,主要包括: 路径总和问题的递归和迭代解法 从中序与后序遍历序列构造二叉树的方法 最大二叉树的构建方法 合并二叉树的递归解法 二叉搜索树的搜索、验证、最小绝对差、众数查找等问题的解法 二叉树最近公共祖先的查找方法 二叉搜索树的插入、删除、修剪等操作 有序数组转换为平衡二叉搜索树的方法 二叉搜索树转换为累加树的方法 这些算法主要采用递归思想,部分问题提供了迭代解法,涵盖了二叉树的遍历、搜索、构建和转换等核心操作。作者对每个问题都给出了清晰的解题思路和Java实现
2025-10-17 15:13:13
2010
原创 算法练习 - 二叉树-1
在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。平衡二叉树:一颗高度平衡二叉树的定义是:一个二叉树的每个节点的左右两个子树的高度差的绝对值不能超过1。它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。高度:指从该节点到叶节点的最长简单路径的条数(向上计数)思路:可以参照求每层的平均值的思路,两者十分相似。
2025-10-09 22:37:22
734
原创 黑马点评day05
使用SortedSet,如果使用的排名和使用角标是一样的,但是SortedSet可以按照Score进行排序。1.TimeLine:不做筛选,简单的按照内容的发布时间排序,常用于好友或者关注,例如朋友圈。按照商户类型做分组,类型相同的商户作为同一组,以typeld为key存入同一个GEO集合即可。关注推送(feed)直译投喂,为用户持续推送”沉浸式“的体验,通过无限下拉刷新获取新的信息。优点:投喂用户感兴趣的内容,用户黏度很高,容易沉迷。优点:信息全面,不会有缺失,且实现简单。
2025-09-29 21:51:30
199
原创 算法练习-栈和队列
本文介绍了栈和队列的基本概念及其在Java中的实现方式,并通过LeetCode经典题目展示了具体应用。主要内容包括:1.栈和队列的基本原理(先进后出/先进先出)及Java实现(Stack和Deque);2.栈与队列的相互实现(LeetCode232/225);3.栈在字符串匹配(有效括号LeetCode20)、去重(LeetCode1047)和表达式求值(逆波兰表达式LeetCode150)中的应用;4.队列在滑动窗口最大值(LeetCode239)和前K个高频元素(LeetCode347)问题中的解决方案
2025-09-26 11:44:31
360
原创 算法练习-字符串
推得:当字符串s的长度可以被其最长相等前后缀不包含的子串的长度整除时,不包含的子串就是s的最小重复子串。* 必要条件:如果字符串s的最长相等前后缀不包含的子串是s的最小重复子串,那么s必然是由重复子串组成的。示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2。输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]输入: s = "abcdefg", k = 2。输出: "world!输出: "bacdfeg"
2025-09-24 16:07:33
383
原创 算法练习-哈希表
本文总结了8道LeetCode哈希相关算法题解:1.有效字母异位词(242)通过字符计数比较;2.数组交集(349)利用HashSet去重;3.快乐数(202)用HashSet检测循环;4.两数之和(1)使用HashMap存储差值;5.四数相加(454)分组哈希统计;6.赎金信(383)字符计数比较;7/8.三/四数之和(15/18)采用双指针法,需注意去重和剪枝处理。所有解法均给出Java实现代码,涉及哈希表、集合等数据结构的应用。
2025-09-20 21:59:39
1639
1
原创 黑马点评day04
Redis实现异步秒杀业务的核心在于利用其消息队列特性。通过list结构模拟阻塞队列(BRPOP/BLPOP)实现基础消息队列,支持持久化但存在消息丢失风险;PubSub模型支持多订阅但无法持久化;Stream作为完善方案(Redis5.0+)提供消息回溯、多消费者组、阻塞读取和确认机制,能有效避免消息漏读。具体实现时,使用set结构校验库存和用户重复购买,通过Stream消费者组机制实现高并发下的异步处理,兼顾性能与可靠性,解决传统秒杀系统的痛点。
2025-09-19 15:09:25
317
原创 算法练习-链表
本文总结了链表相关算法题的典型解法。主要包括:1.移除链表元素(LeetCode203)的两种方法:普通删除和使用虚拟头节点;2.设计链表(LeetCode707)的插入操作实现;3.翻转链表(LeetCode206)的迭代和递归解法;4.两两交换节点(LeetCode24)的虚拟头节点法;5.删除倒数第N个节点(LeetCode19)的双指针技巧;6.链表相交问题(LeetCode160)的长度对齐法;7.环形链表(LeetCode142)的快慢指针解法。这些题目涵盖了链表操作的基本技巧,如虚拟头节点、双
2025-09-17 22:30:37
443
原创 算法练习 - 数组
输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]输入nums = [-1,3,5,9,11],target =9。输入:s = 7, nums = [2,3,1,2,4,3]解释:子数组 [4,3] 是该条件下的长度最小的子数组。输入:nums = [-4,-1,0,3,10]输出:2 nums = [2,2,_,_]输入: nums = [3,2,2,3](1)区间 [left,right](2)区间 [left,right)输出:[0,1,9,16,100]
2025-09-16 18:21:49
219
原创 黑马点评day03
摘要 本文探讨了分布式系统中的全局唯一ID生成和并发控制问题。针对优惠券秒杀业务中的超卖问题,分析了乐观锁和悲观锁的解决方案,并指出乐观锁在高并发场景下的局限性。重点介绍了基于Redis的分布式锁实现,包括基本SETNX方法及其存在的误删、不可重入等问题。为解决这些问题,提出了使用Lua脚本保证原子性操作和Redisson框架的改进方案。Redisson通过可重入机制、重试机制和看门狗续约功能优化了分布式锁,并采用多节点独立部署方式解决主从一致性问题,确保即使部分节点故障也能维持锁的安全性。
2025-09-15 22:01:13
576
原创 黑马点评day02
本文介绍了商户查询缓存的相关技术要点。主要内容包括:1)Redis缓存的添加与更新策略,推荐采用删除缓存方案;2)缓存与数据库操作的同步保障方法;3)缓存穿透的解决方案(缓存空对象、布隆过滤);4)缓存雪崩和击穿的概念及应对措施;5)两种热点key问题的解决方案(互斥锁和逻辑过期)。文章还简要提及了单体系统和分布式系统下的不同处理方式,以及缓存工具封装的重要性。
2025-09-13 16:58:12
419
原创 黑马点评day01
本文摘要:文章探讨了基于Redis解决Session共享的登录方案。针对多Tomcat环境下Session不共享的问题,提出使用Redis存储Session数据,其优势在于数据共享、内存存储和key-value结构。同时分析了登录校验机制差异:传统Session依赖Tomcat自动处理,而Redis方案需手动返回token。最后针对拦截器优化问题,提出通过order参数控制拦截顺序,确保所有请求都能刷新token有效期,避免用户登录状态异常失效。
2025-09-12 16:18:10
290
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅