
LeetCode
文章平均质量分 79
从LeetCode的刷题中去掌握算法
十八岁讨厌编程
没事就喜欢画思维导图
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表系列① -- 移除链表元素
文章目录题目概述解题思路代码实现小总结题目概述解题思路代码实现小总结原创 2022-03-06 19:56:19 · 4513 阅读 · 0 评论 -
链表的初识
文章目录单向链表双向链表环形链表链表的定义链表的存储方式数组与链表的性能分析单向链表链表(linked list)是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成。单向链表的每一个节点又包含两部分,一部分是存放数据的变量data,另一部分是指向下一个节点的指针next。链表的第一个节点被称为头节点,最后一个节点被称为尾节点,尾节点的next指针指向空如图所示:注意:与数组按照索引来随机查找元素不同,对于链表的其中一个节点我们只能通过他的next指针查找到他的下一个节点。双原创 2022-03-06 17:04:12 · 925 阅读 · 0 评论 -
双指针系列① -- 三数之和
文章目录题目概述解题思路代码实现小总结题目概述此题对应力扣15.三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]解题思原创 2022-03-06 15:49:20 · 797 阅读 · 1 评论 -
Hash法(哈希表)的小总结
目录关键知识点Hash表三大结构分析数组结构的使用Set结构的使用Map结构的使用三大结构的总结关键知识点hash表的最常用的作用:快速判断一个元素是否在集合里!hash表的三种结构:①数组②set(集合)③map(映射)这其中每一个结构都有其特点以及特定的使用场景!Hash表三大结构分析数组结构的使用它的具体使用场景有力扣的242.有效的字母异位词和383.赎金信等赎金信题目给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 m原创 2022-01-02 15:01:14 · 708 阅读 · 0 评论 -
哈希表系列⑤ -- 四数相加 II
文章目录题目概述解题思路代码实现题目概述对应力扣454.四数相加 II给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:①0 <= i, j, k, l < n②nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0示例:输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2原创 2022-03-06 12:28:41 · 336 阅读 · 0 评论 -
哈希表系列④ -- 两数之和
文章目录题目概述解题思路代码实现小总结题目概述对应力扣1.两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]原创 2022-03-06 12:01:08 · 320 阅读 · 0 评论 -
哈希表系列③ -- 快乐数
文章目录题目概述解题思路代码实现小总结题目概述此题对应力扣202.快乐数编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false 。示例:输入:n = 19输出:true解释:示例:输入:n = 2输出:false解原创 2022-03-06 11:32:56 · 510 阅读 · 0 评论 -
哈希表系列② -- 两个数组的交集
文章目录题目概述解题思路代码实现小总结题目概述对应力扣的349.两个数组的交集给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。示例:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9] 也是可通过的解题思路此题纯粹的利用Set(集)的性质进行解题。思路也很原创 2022-03-06 11:10:25 · 525 阅读 · 0 评论 -
哈希表系列① -- 有效的字母异位词
文章目录题目概述解题思路代码实现小总结题目概述此题对应力扣的242.有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例:输入: s = “anagram”, t = “nagaram”输出: true输入: s = “rat”, t = “car”输出: false解题思路哈希表有三种抽象的实现方式:数组集(Set)映射(Map)对于这种原创 2022-03-06 10:54:58 · 419 阅读 · 0 评论 -
栈与队列系列⑤ -- 前k个高频元素
目录题目概述做题思路两个注意点优先级队列的排序问题Comparator接口的实现代码实现代码中的注意点Java HashMap getOrDefault() 方法lambda表达式题目概述此题对应力扣的347.前k个高频元素题目:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]输入: nums = [1], k = 1输出: [1原创 2022-01-08 16:00:47 · 575 阅读 · 0 评论 -
栈与队列系列④ -- 滑动窗口的最大值
目录题目概述解题思路代码实现此题的几个重要知识点逻辑表达式将Integer列表转化为int数组三元表达式的复习题目概述此题对应力扣的239.滑动窗口的最大值题目:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:解题思路这个题刚开始做的时候,目的很明确使用链表模拟队列,然后随着窗口的移动进行相应的进队和出队,然后再利用Collections的方法ma原创 2022-01-08 13:03:40 · 982 阅读 · 0 评论 -
栈与队列系列③ -- 逆波兰表达式求值
目录题目概述解题思路代码实现题目概述此题对应力扣的150.逆波兰表达式求值题目:根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例:解题思路这题首先要明白题意,你要用栈的特性去对应着思考。首先还是创建一个栈,创建一个指针,指向数组的头部,当指着的是数字就往栈中添加,如果是计算符号,就把最原创 2022-01-07 14:53:56 · 632 阅读 · 0 评论 -
栈与队列系列② -- 删除字符串中的所有相邻重复项
目录题目概述解题思路方法一方法二代码实现方法一方法二(第一种)方法二(第二种)方法三(第三种)做题反思题目概述此题对应力扣1047.删除字符串中的所有相邻重复项题目:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相原创 2022-01-06 23:28:12 · 834 阅读 · 0 评论 -
栈与队列系列① -- 有效的括号
目录题目概述解题思路代码实现题目概述此题对应力扣的20.有效的括号题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:解题思路**这个题是典型的对称匹配的题目,而栈结构非常适合用来解这种类型的题目。**不过一定要分类讨论,否则要不停的修修补补。总共有三种不符合条件的情况:左括号多了右括号多了左右括号不匹配对应的三种结果:造成最原创 2022-01-06 18:25:41 · 445 阅读 · 0 评论 -
栈与队列的相互实现
目录用栈实现队列做题思路代码实现用队列实现栈做题思路方式一思路方式二思路方式一代码实现方式二代码实现做题反思用栈实现队列对应力扣232.用栈实现队列题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 t原创 2022-01-06 16:25:20 · 533 阅读 · 0 评论 -
认识栈与队列
目录栈的基本概念(Stack)栈的基本操作栈的应用场景队列的基本概念(Queue)队列的基本操作队列的使用场景栈与队列联合辨析栈的基本概念(Stack)我们可以将栈理解成一个箱子往里面放东西可以叫进栈,或者压栈。将新的东西放到栈顶元素的上面,使之成为新的栈顶元素。从里面拿东西很显然只能从最上面开始拿,叫做出栈,或者退栈。将栈顶的元素进行删除。他的经典特性:新进后出。满足:FILO (First In Last Out)栈的基本操作① boolean empty(): 判断栈是否为空,若空栈则原创 2022-01-05 23:53:50 · 746 阅读 · 0 评论 -
二叉树系列① -- 二叉树的定义以及递归遍历
目录二叉树的定义二叉树的递归遍历前序遍历代码实现后序遍历代码实现中序遍历代码实现总结二叉树的定义在java中链式存储的二叉树的节点定义方式遵循**“三属三构”**,也就是三个属性,三个构造器的基本构造。三属性:数值属性左节点(孩子)属性右节点(孩子)属性三构造:空参构造器数值构造器左右节点和数值构造器代码实现如下:public class TreeNode { * int val; * TreeNode left; * TreeNode righ原创 2022-01-05 20:42:53 · 610 阅读 · 0 评论 -
KMP算法详解,能认字就能搞懂
目录你需要知道的有关KMP算法的概念KMP算法的核心思想以及原理什么是前缀表,什么是前缀,后缀?如何用代码实现前缀表?用前缀表去做对应匹配(KMP算法的完整实现)文章说明你需要知道的有关KMP算法的概念在弄懂KMP算法之前先要了解其中涉及的概念。①首先你要明确KMP算法解决的是字符串的匹配问题。②KMP中涉及两个字符串,一个是文本串(主串),另外一个是模式串,而KMP算法就是在文本串(主串)中去寻找模式串。③KMP算法实现的过程中少不了一个重要的零部件 – 前缀表,而前缀表我们在解决问题的时候原创 2022-01-04 23:40:33 · 1566 阅读 · 0 评论 -
字符串系列⑤ -- 重复的子字符串
目录题目概述解题思路代码实现一个小注意点题目概述此题对应力扣的459.重复的子字符串,考察的也是KMP算法给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例:输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。输入: “aba”输出: False输入: “abcabcabcabc”输出: True解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “a原创 2022-01-05 14:42:13 · 1360 阅读 · 0 评论 -
字符串系列④ -- 左旋转字符串
目录题目概述解题思路代码实现题目概述对应力扣中剑指 Offer 58 - 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。输入: s = “abcdefg”, k = 2输出: “cdefgab”输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”解题思路如果可以另外开辟空间,这个题会变得原创 2022-01-03 13:45:55 · 870 阅读 · 0 评论 -
字符串系列③ -- 翻转字符串里的单词
目录题目概述解题思路代码实现做题反思总结方法题目概述此题对应力扣里的151.翻转字符串里的单词,中等难度,解题过程些许麻烦,但把问题分解,再解决就会轻松很多。给你一个字符串 s ,逐个翻转字符串中的所有 单词 。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。说明:①输入字符串 s 可以在前面、后面或者单词间包含多余的空格。②翻转后单词间应当仅用一个空格分隔。③翻转后的字符串中不应包含额外的空格原创 2022-01-03 02:14:15 · 1305 阅读 · 0 评论 -
字符串系列② -- 替换空格
目录题目思路代码实现方法二的实现StringBuffer的实现方法题目此题对应LeetCode中剑指offer05请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”思路在拿到字符串后,先计算空格数,再根据要替换的字符对数组进行扩容,使用双指针法,此后有两种处理方法:方法一:创建一个新的扩容好的数组,一个指针(A指针)指着新数组的头部,另外一个指针(B指针)指着原数组的首部,然后依原创 2022-01-02 20:37:50 · 1699 阅读 · 0 评论 -
字符串系列① -- 反转字符串
目录题目思路代码实现解法一解法二题目对应力扣的344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例:输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]反转字符串在java中可以直接使用StingBuffer或StringBuilder里面的reverse方法来实现,但是也可以用另外一个方原创 2022-01-02 15:59:18 · 813 阅读 · 0 评论 -
LeetCode第18题:四数之和
目录题目概述基本思路代码实现方法一方法二总结题目概述给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答原创 2022-01-02 13:15:09 · 4386 阅读 · 0 评论