
LeetCode/算法
文章平均质量分 69
记录LeetCode刷题新路、以及算法、数据结构
秃秃爱健身
熟读JDK、SSM、SpringCloud生态源码,对源码有独特的见解,可以写出让大多数人看懂的源码分析文章。
展开
-
【算法100天 | 20】有环/无环链表的相交问题(Java实现)
有环/无环链表的相交问题原创 2022-11-17 21:08:26 · 1252 阅读 · 15 评论 -
【算法100天 | 19】链表拆分、深拷贝
链表系列题目原创 2022-11-15 19:07:39 · 661 阅读 · 3 评论 -
【算法100天 | 18】回文链表的多种解法(JAVA实现)
回文链表 Leetcode 234、回文链表的多种解法原创 2022-11-14 11:31:00 · 920 阅读 · 10 评论 -
【算法100天 | 17】手撕堆,使插入、删除任意元素的时间复杂度为O(logn)(Java实现)
手撕堆,使插入、删除任意元素的时间复杂度为O(logn)(Java实现)原创 2022-11-03 23:00:10 · 873 阅读 · 3 评论 -
【算法100天 | 16】快慢指针求链表“中节点”系列问题(Java实现)
详细思路版 快慢指针求链表“中节点”系列问题(Java实现)原创 2022-11-02 20:45:00 · 525 阅读 · 12 评论 -
【算法100天 | 15】快速排序的非递归写法(Java实现)
快速排序的非递归实现,Java版原创 2022-10-27 19:20:12 · 1734 阅读 · 1 评论 -
【算法100天 | 14】归并排序系列问题2:区间和的个数(LeetCode 327)
LeetCode 327. 区间和的个数(难度:困难)原创 2022-10-26 20:00:00 · 593 阅读 · 0 评论 -
【算法100天 | 13】归并排序引出的系列问题(小和、逆序对、特定逆序对)
归并排序引出的系列问题(小和、逆序对、特定逆序对)原创 2022-10-20 18:30:00 · 337 阅读 · 1 评论 -
【算法100天 | 12】归并排序的非递归写法(Java实现)
归并排序的非递归写法,归并排序的迭代写法原创 2022-10-18 14:50:26 · 391 阅读 · 4 评论 -
【算法100天 | 11】用栈实现队列、用队列实现栈系列问题
1、实现一个栈,在基本功能的基础上,实现返回栈中最小元素的功能,要求时间复杂度为O(1);2、用栈实现队列数据结构;3、用队列实现栈数据结构原创 2022-10-13 07:00:00 · 457 阅读 · 6 评论 -
【算法100天 | 10】位运算找出仅出现奇数次的数字系列问题
1、编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值;2、一个数组中有一个数出现了奇数次,其他数都出现了偶数次,找出这个只出现了奇数次的数;3、一个数组中有两个数出现了奇数次,其他数都出现了偶数次,找到出现奇数次的两个数;4、一个数组中,有一个数出现了K次,其他数都出现了M次(M > 1, K < M);找到仅出现了K次的数;要求:空间复杂度为O(1)、时间复杂度为O(n)。原创 2022-10-10 16:58:25 · 1015 阅读 · 6 评论 -
你写的冒泡排序,最优时间复杂度是O(n)吗
冒泡排序,最优时间复杂度为O(n)的写法原创 2022-10-09 13:27:53 · 832 阅读 · 1 评论 -
【算法100天 | 9】二叉树的路径总和系列问题
1、路径总和(LeetCode 112)2、路径总和 II(LeetCode 113)原创 2022-09-27 18:53:23 · 703 阅读 · 11 评论 -
【算法100天 | 8】二叉树特点相关笔试题目(镜面树、搜索树、平衡树、树深度....)
1、判断两棵树是否结构相同(LeetCode 100)2、判断一颗树是否为镜面树(LeetCode 101)3、验证二叉搜索树(LeetCode 98)4、判断是否是平衡搜索二叉树(LeetCode 110)5、二叉树的最大深度(LeetCode 104)原创 2022-09-26 20:34:01 · 903 阅读 · 14 评论 -
【算法100天 | 7】二叉树的前序、中序、后序、层序遍历(递归和迭代两种实现)
1、二叉树前序遍历(LeetCode 144)2、二叉树中序遍历(LeetCode 94)3、二叉树的后序遍历(LeetCode 45)4、二叉树的层序遍历(LeetCode 102)5、二叉树的层序遍历 II(LeetCode 107)原创 2022-09-25 20:52:02 · 522 阅读 · 19 评论 -
【算法100天 | 6】从两个到K个有序链表的合并(LeetCode 21 -> 23)
合并两个有序链表题解、合并K个有序的链表题解原创 2022-09-23 18:15:12 · 336 阅读 · 4 评论 -
【算法100天 | 5】图解从easy到hard的链表反转,执行用时超越100%用户(LeetCode 206 > 92 > 25)
1、给你单链表的头节点 head ,请你反转链表,并返回反转后的链表(LeetCode 206题)2、给你双向链表的头节点 head ,请你反转链表,并返回反转后的链表3、反转单链表的某一段(LeetCode 92题)4、K个一组翻转链表(LeetCode 25题)原创 2022-09-22 20:42:54 · 781 阅读 · 30 评论 -
【算法100天 | 4】链表-两数相加(LeetCode 2)
LeetCode第2题:两数相加(链表)原创 2022-09-20 22:46:11 · 246 阅读 · 3 评论 -
【算法100天 | 3】筑基二分查找(含LeetCode 34题 在排序数组中查找元素的第一个和最后一个位置)
1、在排序数组中判断某个数是否存在2、在有序数组中找到第一个大于等于某个数的数3、在有序数组中找到第一个小于等于某个数的数4、在排序数组中查找元素的第一个和最后一个位置原创 2022-09-17 16:15:05 · 388 阅读 · 12 评论 -
【算法100天 | 2】位运算实现加减乘除(含:LeetCode 29题 两数相除)
1、打印整数的二进制数据2、位运算求相反数3、位运算实现加法4、位运算实现减法5、位运算实现乘法6、位运算实现除法原创 2022-09-15 07:00:00 · 894 阅读 · 12 评论 -
【算法100天 | 1】随机数多种玩法
1、对于任意的x,x属于[0,1),[0,x)范围上的数出现概率是x;求[0,x)范围上的数出现概率是x的平方、三次方( x^2、x^3)?2、给定一个函数f1()生成范围1-5内的随机值,根据f1()做一个1-7的等概率随机函数;3、根据一个固定概率(具体多少不知道)返回0和1的函数x(),做一个等概率返回0和1的函数;原创 2022-09-13 18:00:00 · 730 阅读 · 12 评论 -
手撕漏桶&令牌桶限流算法(Java版)
手撕漏桶限流算法、手撕令牌桶限流算法原创 2022-08-17 07:00:00 · 2695 阅读 · 7 评论 -
LeetCode1672. 最富有客户的资产总量(Java版打卡)
LeetCode1672. 最富有客户的资产总量(Java版打卡)原创 2022-04-14 10:32:55 · 303 阅读 · 0 评论 -
LeetCode796. 旋转字符串(从业务思想到算法思想)
LeetCode796. 旋转字符串(从业务思想到算法思想)原创 2022-04-12 13:41:52 · 872 阅读 · 0 评论 -
LeetCode2043. 简易银行系统(Java打卡版)
LeetCode2043 简易银行系统,Java实现原创 2022-03-18 15:54:37 · 524 阅读 · 0 评论 -
LeetCode1791. 找出星型图的中心节点(Java打卡版)
1791. 找出星型图的中心节点(简单)方法一:计算每个节点的度 时间复杂度、空间复杂度:O(n)方法二:同时出现在两条边上的节点 时间复杂度、空间复杂度:O(1)原创 2022-02-18 17:56:15 · 329 阅读 · 0 评论 -
LeetCode40. 组合总和 II(Java版)
1984. 学生分数的最小差值(简单)给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意: 解集不能包含重复的组合。方法:dfs递归遍历 + 回溯 + 剪枝原创 2022-02-16 23:12:24 · 335 阅读 · 0 评论 -
LeetCode1984. 学生分数的最小差值(打卡Java版)
LeetCode1984. 学生分数的最小差值Java版,方法:排序 + 滑动窗口原创 2022-02-11 10:05:43 · 301 阅读 · 0 评论 -
LeetCode61. 旋转链表(通俗易懂Java版)
给你一个链表的头节点 `head` ,旋转链表,将链表每个节点向右移动 `k` 个位置。思路:假设链表的长度为 `n`,首先 当向右移动的次数 `k`,其满足条件 `k≥n` 时,仅需要向右移动 `k mod n` 次;因为每 n 次移动都会让链表变为原状。其次,新链表的最后一个节点为原链表的`第 n - k 个节点`(从 1 开始计数)。注意:临界情况的判定,比如:链表为空、链表只有一个节点;k为0或k为链表长度的整数倍。原创 2022-02-08 15:12:49 · 1144 阅读 · 0 评论 -
LeetCode539. 最小时间差(Java版)
539. 最小时间差(中等)给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。示例 1:输入:timePoints = [“23:59”,“00:00”]输出:1示例 2:输入:timePoints = [“00:00”,“23:59”,“00:00”]输出:0提示:2 <= timePoints <= 2 * 104timePoints[i] 格式为 “HH:MM”思路第一时间想到排序,然后直接原创 2022-01-18 17:23:08 · 300 阅读 · 0 评论 -
LeetCode31. 下一个排列(Java版)
31. 下一个排列(中等)实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。原创 2022-01-11 07:40:40 · 345 阅读 · 0 评论 -
LeetCode1576. 替换所有的问号(Java版)
LeetCode 替换所有的问号(Java版)原创 2022-01-05 20:24:05 · 327 阅读 · 0 评论 -
LeetCode292. Nim 游戏(Java版)简单的一题居然可以看出那么多思想
292. Nim 游戏你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。示例 1:输入:n = 4输出:false解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3原创 2021-12-30 20:21:31 · 3568 阅读 · 0 评论 -
LeetCode22. 括号生成(Java版)
22. 括号生成 (中等难度)数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8思路典型的递归遍历,题目中所给的n我们可以看做是Java中的Semaphore信号量,每次要添加")“或”(“时,从一个地方取permit许可证,获取到许可则原创 2021-12-28 22:02:49 · 977 阅读 · 0 评论 -
数据结构基础:Java版手撕BST二叉搜索树(含前序、中序、后序、层序遍历,树的高度计算)
前传文章中的图形化演示请在下述网址模拟:https://www.cs.usfca.edu/~galles/visualization/Algorithms.htmlBST概述和链表一样,二叉搜索树也是一种动态数据结构。但其查询效率更高,查询的均摊时间复杂度为O(logn)。二叉搜索树的特点:只有一个根节点,每个节点最多有两个孩子节点,每个节点最多只有一个父节点。二叉搜索树具有天然递归结构。每个节点的左/右子树也是二叉搜索树。二叉搜索树的每个节点的值大于左子树所有节点的值,小于右子树所有节点原创 2021-09-13 08:00:41 · 379 阅读 · 0 评论 -
数据结构基础:使用数组和链表实现栈
一、栈概述在开始具体的编码之前,我们先聊一下栈。栈的特点是先进后出FILO;举个例子:上大学的时候学院要开发晚会,班级按顺序进去,一般退场的时候,先进去总是最后出去。或者以子弹装入弹夹来看,先入弹夹的子弹最后射出。二、基于数组和链表实现栈...原创 2021-09-05 11:01:45 · 365 阅读 · 0 评论 -
数据结构基础:使用数组和链表实现队列、循环队列
其他如果大家想再次学习一下数据结构,推荐一个数据可视化的数据结构学习网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html一、队列概述在开始具体的编码之前,我们先聊一下队列。队列的特点是先进先出FIFO;队列中的数据的处理,就像在车站排队买票一样,先排队的先买到票。队列常用于计算机操作系统中,它在多用户/多任务环境中尤为重要,因为多个用户或任务可能同时请求同一资源。例如:用户提交到打印机的打印任务由队列控制,保证打印机同原创 2021-09-04 22:06:19 · 774 阅读 · 2 评论 -
为什么要用LRU算法?Java怎么实现?
一、LRU算法介绍LRU算法全称Least Recently Used,即检查出最近最少使用的数据。其通常应用在内存淘汰策略中,将不常用的数据移出内存,为"热点数据" 或 新数据 腾出空间。本质上算法很简单,只需要将所有数据按使用时间排序,在需要进行数据淘汰的时候把最老的数据淘汰掉。二、LRU算法的应用LRU算法的应用很多,我们这里分别从硬件和软件中抽取一个典型应用做介绍。1、Linux内存分页分页是为了解决内存不够用的问题,它把内存分成固定大小的页框(page frame 4K标准页),把硬原创 2021-08-28 08:27:13 · 578 阅读 · 0 评论 -
使用Java实现对文件的拆分
指定拆分后的文件数量对文件进行拆分逻辑十分简单:通过文件的大小和拆分的数量确定每个文件的大小。由于缓冲区的设计,每个文件的大小存在肉眼不可见的误差(1KB之内,具体的差值由你设定的缓冲区大小决定)。废话不多说直接上代码…import java.io.*;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.util.ArrayList;import java.util.List;/** * 对原创 2020-07-19 17:25:55 · 1473 阅读 · 0 评论 -
20G大文件使用Java高效进行外排,算法 = 败者树 + 多路归并排序
业务场景由于各种原因,数据库stone库和二级库数据同步有问题,现在对二级库做数据补漏。由于数据表的主键ID是UUID形式,更新时间字段没有索引,所以DBA直接否定了直接在数据库层面操作。解决方案改为将表数据(ID和update_time字段)以某种规则逐行导出,对两个文件根据ID分别进行排序,然后逐行比对,输出结果。此处我将介绍如果使用基于败者树的多路归并排序算法对20G的文本文件进行高效排序。多路归并排序多路归并排序算法在常见数据结构书中都有涉及。从2路到多路(k路),增大k可以减少外存信息读写时原创 2020-07-19 17:12:40 · 1086 阅读 · 0 评论