![](https://img-blog.csdnimg.cn/20191216164547691.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode刷题记录与总结
文章平均质量分 62
用于记录Banana的LeetCode刷题记录,分享解题算法,用博客来进行记录,有什么问题欢迎提出!!!
Geek-Banana
JAVACV工程师
新手炼丹师
展开
-
字典树的实现,插入和查找
一般是用多个字符串来构建的树,主要调用的方法有两个,一个是插入,另外一个就是查找原创 2022-07-12 00:54:12 · 229 阅读 · 0 评论 -
【LeetCode】LeetCode经典题目合集,面试刷这些就够了(持续更新)
经典lc题目整理,有个人理解,可以作为学习和准备面试使用原创 2021-03-13 18:58:45 · 7234 阅读 · 0 评论 -
【LeetCode】比较典型的用堆解决的一些问题(持续更新ing)
1046. 最后一块石头的重量leetcode链接,点击进入简单题解法一:排序算法class Solution { public int lastStoneWeight(int[] stones) { Arrays.sort(stones); int len = stones.length; int x = len - 1; int y = len - 2; while (len > 1) {原创 2020-12-30 11:46:50 · 125 阅读 · 0 评论 -
【LeetCode】 617. 合并二叉树 递归
题目题目传送门:传送门(点击此处)题解思路典型的看到题就应该想到用递归去写代码其实我个人已开始也没写出来,写着写着感觉要判断的太多了,好像不太对,看了看官方题解,才想起来这个是有返回值 TreeNode ,要好好利用起来这个返回值,所以才有了这个代码。在代码里面还是要灵活的运用,另外递归的值,最好是要考虑传进来的 TreeNode ,而不是它的 left 或者 rightcode/** * Definition for a binary tree node. * public clas原创 2020-12-05 12:38:14 · 119 阅读 · 0 评论 -
【剑指offer】 12. 矩阵中的路径
题目题目传送门:传送门(点击此处)题解今天是六一儿童节,LeetCode也推出了分糖果的题目,真的是有心了,我也决定六月要好好打卡算法题了思路这道题的思路很容易想到,图的深度遍历,虽然是个中等难度的题目吧,不过也不难遍历二维数组, 从每个节点都去判断是否能满足这个字符串在判断每个元素是否能满足要求时,每遍历一个元素之后,将这个元素置为0,当遍历完一轮之后再恢复回去就可以了其实到这就可以出代码了,题目不难codeclass Solution { int rows, cols,原创 2020-09-27 18:36:42 · 144 阅读 · 3 评论 -
【剑指offer】21. 调整数组顺序使奇数位于偶数前面
题目题目传送门:传送门(点击此处)题解最近有小伙伴面试遇到这道题目,这道题目还是比较简单的,一定要多做题,提高拓展自己的思维和想法思路典型的双指针题目,一个左指针,一个右指针,遍历一下,如果是偶数则交换codeclass Solution { public int[] exchange(int[] nums) { int l = 0; int r = nums.length - 1; while (l < r) {原创 2020-09-27 17:39:29 · 230 阅读 · 2 评论 -
【剑指offer】 18. 删除链表的节点
题目题目传送门:传送门(点击此处)题解思路链表的删除操作,其实就是指针的变化,比较easy的题目因为要删除一个元素,要修改删除元素的上一个元素的next指针,所以先创建一个新的node节点,next指向原链表head这时head指针就释放了出来,然后head指向新的node遍历链表,进行元素的删除code/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2020-09-27 17:28:11 · 158 阅读 · 2 评论 -
【LeetCode】 1431. 拥有最多糖果的孩子
题目题目传送门:传送门(点击此处)题解今天是六一儿童节,LeetCode也推出了分糖果的题目,真的是有心了,我也决定六月要好好打卡算法题了!!思路题目很容易,两次遍历,第一次找到最大值 max,第二次遍历数组,每个值都加上 extraCandies 看看有没有超过 max,扔到list里面就行了,很简单codeclass Solution { public List<Boolean> kidsWithCandies(int[] candies, int extraCand原创 2020-06-01 07:33:20 · 221 阅读 · 0 评论 -
【LeetCode】 155. 最小栈
题目题目传送门:传送门(点击此处)题解思路在题解看了一圈也没有找到java中用 Stack 和 PriorityQueue 实现的,所以就把自己的代码贴上来仅供参考吧push(x): Stack push 时间复杂度 O(1),PriorityQueue push 时间复杂度 O(lgn)pop(): Stack pop 时间复杂度 O(1),PriorityQueue pop 时间复杂度 O(lgn)top(): Stack top 时间复杂度 O(1)getMin(): Priorit原创 2020-05-12 17:42:27 · 164 阅读 · 0 评论 -
【LeetCode】 33. 搜索旋转排序数组
Hi,This is banana.你点一个赞我就长一根头发保护程序员的地中海从我做起题目题目传送门:传送门(点击此处)题解思路这道题是经典的二分法,只不过有了一定的改动,所以,在解题的流程中也有所改变代码主要的写法还是二分法,其次就是边界怎么动的问题了比如说,我们的初始数组与target:然后,我们找到中间值:我们可以发现,必然有一边是完全排序的,所以我们只需要...原创 2020-04-27 19:52:31 · 132 阅读 · 0 评论 -
【LeetCode】 199. 二叉树的右视图
题目题目传送门:传送门(点击此处)题解思路最简单的思路,层次遍历,直接贴上来,就好,每一层,拿到最右边的节点,就完事了,比较简单不做详细解释了,看代码吧!codeclass Solution { public List<Integer> rightSideView(TreeNode root) { List<Integer> res =...原创 2020-04-22 19:46:05 · 121 阅读 · 0 评论 -
【LeetCode】 1248. 统计「优美子数组」
题目题目传送门:传送门(点击此处)题解思路仔细分析一下题目,我们要找的是当前数组的连续子数组,其实不一定非得要把每个数组都找到,只要能算出最后的数量就可以了,所以,我们需要思考一下,如何确定这个数量是需要考虑的简化一下,只要找到每个奇数前后的数字的个数,我们就能确定每种可能的个输了给定一个数组,和一个k值我们找到这个数组中每个奇数间隔数字的个数表如下:到现在可能还不是很明...原创 2020-04-21 16:56:22 · 163 阅读 · 0 评论 -
【LeetCode】 200. 岛屿数量
题目题目传送门:传送门(点击此处)题解思路题目虽然是 中等 题目,但也是比较经典的题目,比如说之前做过的 994. 腐烂的橘子,和这道题目很像,都是比较经典的图的遍历,直接使用 DFS 即可直接遍历,遇到1之后,分别向四个方向进行拓展,把是1的置为0,是0直接返回codeclass Solution { int rows; int cols; pub...原创 2020-04-20 16:08:47 · 173 阅读 · 0 评论 -
【LeetCode】 542. 01 矩阵 动态规划 dp
题目题目传送门:传送门(点击此处)题解思路这道题目的解法有两种,对于广度优先来说我实在不是很了解,所以只能说一下动态规划的算法了这道题目需要找到的是最优子结构,递推式如下我们能很明确的得出,某个点的最小值即为其 上、左、下、右 四个值中的最小值,所以,可以考虑用dp来做但是遇到问题,因为0所在的位置不清楚,所以需要从四个方向(左上角、左下角、右上角、右下角)来进行dp,不过仔细...原创 2020-04-15 20:41:33 · 587 阅读 · 2 评论 -
【LeetCode】 445. 两数相加 II 链表头插法
题目题目传送门:传送门(点击此处)题解思路思考好使用什么样的数据结构,这道题目不是很难由给出的demo可知,链表开始是高位,候面是低位,要考虑进位的问题直接向下进行相加是不合适的,我们做加法肯定不会从高位开始加,所以就要考虑变换顺序我们要从个位开始进行相加,遍历链表,放入栈中,再进行操作,我们就能从各位开始了这里还遇到一个问题,直接操作生成链表会变成相反的顺序,所以,在这里生...原创 2020-04-14 20:53:37 · 149 阅读 · 0 评论 -
【LeetCode】 27. 移除元素
题目题目传送门:传送门(点击此处)题解思路典型的双指针题目,用 l 来标明实际指针的位置,用 i 指向要遍历的值的位置。图解:code public int removeElement(int[] nums, int val) { int l = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] !=...原创 2020-04-13 20:51:56 · 90 阅读 · 0 评论 -
【LeetCode】 383. 赎金信
题目题目传送门:传送门(点击此处)题解思路题目比较简单,使用hashmap即可,记录下每个字符出现的个数,然后再依次进行匹配字符是否充足,就能得到结果codeclass Solution { public boolean canConstruct(String ransomNote, String magazine) { if (magazine.length() <...原创 2020-04-13 20:16:48 · 206 阅读 · 0 评论 -
【LeetCode】 程序员金典 面试题 01.06. 字符串压缩 2020年3月16日
题目题目传送门:传送门(点击此处)题解思路本来这道题目是不难的,声明count计数,每个字符和下一个字符进行比较,如果不一样就把字符和count添加进去,如果一样则count++比较麻烦的点,就是最后的字符还要再判断一次,所以我就给字符串加上了一个字符再去进行比较了codeclass Solution { public String compressString(Str...原创 2020-03-16 10:24:25 · 186 阅读 · 0 评论 -
【LeetCode】 695. 岛屿的最大面积 dfs 2020年3月15日
题目题目传送门:传送门(点击此处)题解思路最先想到这个题目和之前做过的一道题很像: 994. 腐烂的橘子两个题目都是 dfs的题目,使用 dfs 即可,关键就是代码要如何来写才漂亮,怎样才能让时间复杂度和空间复杂度最低一开始我也绕弯儿了,现在想想,dfs 的代码其实很简单,完全不用那么麻烦我的第一版代码用了额外的数组标记是否访问过,这个使用了 N的额外空间复杂度,其实可以避免,...原创 2020-03-15 10:37:11 · 94 阅读 · 0 评论 -
LeetCode一百题总结
前言最近一周都没有好好刷题,实在是罪过呀。很久之前就想好好的把leetcode刷一刷,直到最近这一个月重新开始,刷了一百题,真是可喜可贺啊哈哈贴一贴我的刷题的记录基本上呢,就是用了一个月的时间,每天花上几个小时的时间去做一做题目,顺便赚一赚积分,想着能早日换个leetcode的t恤刷题路线探索模块里面的数据结构,比如:数、队列、栈、数组、字符串等初级算法终极算法高级算法...原创 2020-03-14 14:37:27 · 2453 阅读 · 1 评论 -
【LeetCode】 300. 最长上升子序列 最清晰的图解动态规划 2020年3月14日
题目题目传送门:传送门(点击此处)题解思路思考一下,很容易想到使用动态规划来做这道题目定义 dp[i] 来保存前i个元素中的最长上升子序列的元素的个数每次需要判断 nums[i] 时,和 nums[0] ~ nums[i-1] 进行比较,通过 dp[0] ~ dp[i-1] 得到前i个元素的最长子序列,根据前边的元素判断当前元素的最长子序列长度是多少由于csdn不支持幻灯片演示...原创 2020-03-14 09:46:06 · 317 阅读 · 0 评论 -
【LeetCode】 543. 二叉树的直径 2020年3月10日
题目题目传送门:传送门(点击此处)题解思路从题目很容易想到,这道题要使用递归来做,每个节点要存储两个值,分别是 左子树得深度 和 右子树得深度,然后求得每个节点得直径即可因为要遍历一遍节点,所以时间复杂度肯定是 O(n) ,空间复杂度是 树的高度 ,因为用栈来做递归用,所以应该是 O(Height) ,最差是 O(n)至于难点就是,都要访问一个公共变量,所以这个变量抽离出来存储最大得...原创 2020-03-13 14:33:28 · 128 阅读 · 0 评论 -
【LeetCode】 169. 多数元素 2020年3月13日
题目题目传送门:传送门(点击此处)题解思路题目得时间复杂度肯定不小于n,所有得元素必须要遍历一遍之后才能知道结果比较简单想到的就是 哈希表,存储好当前得值出现得次数即可,时间复杂度为 O(n) ,空间复杂度也为 O(n)因为题目给出了务必有这个数字,所以先排序再取 n/2 处得值即为所求,时间复杂度为 O(nlogn),空间复杂度为 O(1)codesolution1cla...原创 2020-03-13 11:39:03 · 111 阅读 · 0 评论 -
【LeetCode】 141. 环形链表
题目题目传送门:传送门(点击此处)题解思路一个指针作为快指针,另外一个指针作为慢指针,两个指针总会相遇拿题目中的示例1做例子,每次 slow指针 移动 一 格,fast指针 移动 两 格code/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode ...原创 2020-03-06 20:03:40 · 91 阅读 · 0 评论 -
【LeetCode】 面试题57 - II. 和为s的连续正数序列 LCOF2020年3月6日
题目题目传送门:传送门(点击此处)题解思路其实有数学方法,我实在是不太会。。。于是我选择了滑动窗口来解决这个问题怎么用滑动窗口主要是解决滑动窗口移动得问题,左右端点如何移动如果 i-j 的和值相加大于 target 得时候,左边界向右移动如果 i-j 的和值相加小于 target 得时候,右边界向右移动如果 i-j 的和值相加等于 target 得时候,左边界向右移动...原创 2020-03-06 17:01:26 · 132 阅读 · 0 评论 -
【LeetCode】 1103. 分糖果 II
题目题目传送门:传送门(点击此处)题解思路o’b’b##宝贝acode原创 2020-03-05 09:38:20 · 164 阅读 · 0 评论 -
【LeetCode】 994. 腐烂的橘子 2020年3月4日
题目题目传送门:传送门(点击此处)题解思路每个坏橘子四周的好橘子,每一分钟之后都会变成坏橘子,呈现了一种扩散的效果,其实这恰好对应了图的广度遍历,我们就可以借助队列来实现这道题目每遍历一次,把遍历到的橘子的坐标放进队列中,下次再根据队列中的橘子进行下一次遍历。codeclass Solution { public int orangesRotting(int[][] g...原创 2020-03-04 10:41:15 · 188 阅读 · 0 评论 -
【LeetCode】 88. 合并两个有序数组 10.01. 合并排序的数组
题目这和《程序员面试金典(第六版)》的10.01.合并排序的数组题目是一样的题目传送门:传送门(点击此处)题解思路看题目,正向思考似乎有点困难,可以考虑倒序,就会变得比较简单倒序进行比较然后进行填充,就能达到想要的效果每次比较 nums1[p] 和 nums2[q] 的大小,对 nums1[i] 进行赋值codeclass Solution { public void...原创 2020-03-03 09:31:38 · 131 阅读 · 0 评论 -
【LeetCode】 206. 反转链表 2020年3月2日
题目题目传送门:传送门(点击此处)题解反转链表,我们其实就是想让上边的链表变成下边的链表,就是下图这样:其实只要每次改变两个节点的指针的方向就可以了temp = new ListNode(head.val);temp.next = res;res = temp;head = head.next;code递归/** * Definition for singly-lin...原创 2020-03-02 09:24:23 · 90 阅读 · 0 评论 -
【LeetCode】 225. 用队列实现栈 2020年3月1日
题目题目传送门:传送门(点击此处)题解思路栈的特点,先入后出;队列的特点,先入先出使用队列来实现栈,每次就要把加入的元素添加到队列的头部,用来保证先入后出,所以,每次添加元素时先把队列中的元素保存到另外的一个临时队列中,然后再向当前队列中添加元素以下的图示,表示的是添加元素时进行的操作3. 其他的操作直接堆queue进行判断即可,比较简单入栈时间复杂度:O(n...原创 2020-03-01 14:43:24 · 108 阅读 · 0 评论 -
【LeetCode】 215. 数组中的第K个最大元素 大顶堆
题目题目传送门:传送门(点击此处)题解思路这道题目是有难度的,如果使用先排序的方法,就有一点墨迹了,所以我们这道题目借助堆的数据结构,实现最大堆就可以了代码class Solution { public int findKthLargest(int[] nums, int k) { // init heap 'the smallest element firs...原创 2020-02-26 14:27:54 · 338 阅读 · 0 评论 -
【LeetCode】 347. 前 K 个高频元素 桶排序 最小堆
题目题目传送门:传送门(点击此处)题解思路首先还是要考虑,数组遍历不完没有结果,所以,遍历第一遍,使用hashmap记录不同数字出现的次数第二次遍历hashmap,以出现的次数作为key,存入到数组中第三次,倒序遍历数组,打印存储的数字即可代码class Solution { public List<Integer> topKFrequent(int[] ...原创 2020-02-26 10:34:43 · 190 阅读 · 0 评论 -
【LeetCode】 46. 全排列 回溯 JAVA
题目题目传送门:传送门(点击此处)题解思路思考这道题目,很容易想到回溯,理解很容易,如下图所以代码写起来,也相对的简单,不过话又说回来,这道题其实不难,还是要多刷一刷题,找到更加合适的解决方案,这个方案依旧不是最优解代码class Solution { List<List<Integer>> res; int[] nums; pub...原创 2020-02-25 21:37:35 · 217 阅读 · 0 评论 -
【LeetCode】 22. 生成括号 回溯 JAVA
题目题目传送门:传送门(点击此处)题解其实这道题目还是有难度的,如果没有放在回溯模块儿下,很难想到使用回溯的解决方案,也许是我太菜了哈哈哈思路括号是一对一对生成的,所以,必须先有 ( ,再有 )。每次递归,只需要有 ( 和 ) 的数量,再有当前拼接成的字符串,就可以进行递归,获得结果。递归就分为四种情况,( 和 ) 都有可能有和没有,所以根据这四种情况进行判断就可以了代码c...原创 2020-02-25 20:03:04 · 137 阅读 · 0 评论 -
【LeetCode】 17. 电话号码的字母组合
题目题目传送门:传送门(点击此处)题解毫不意外,这道题又是看了解析才会做了,这道题目也是典型的递归注意这是回溯板块儿下的一道题目,所以这里面用到了回溯的方法,要清楚的是递归和回溯,是不同的,递归是一种算法结构,回溯是一种算法思想代码class Solution { String[] strs = new String[]{"abc", "def", "ghi", "jkl",...原创 2020-02-25 17:30:02 · 156 阅读 · 0 评论 -
【LeetCode】 73. 矩阵置零 空间O(1)
题目题目传送门:传送门(点击此处)题解空间复杂度为O(mn)的解决方案很容易思考出来空间复杂度为O(m+n)的解决方案也比较容易,创建两个数组长度分别为m和n,用来记录行或者列中出现过的0空间复杂度为O(1)的解决方案就是在 2 的基础上,把这个数组放在了矩阵中来记录我的思路遍历找到第一个 0,并且把这一行和这一列作为记录有 0 的行和列找到的第一个 0 在第一行,第二列...原创 2020-02-24 14:03:58 · 148 阅读 · 0 评论 -
【LeetCode】 15. 三数之和 思路详解
题目题目传送门:传送门(点击此处跳转)题解思路本身这道题也没啥思路,所以还是败给了看题解才找到答案首先想到的肯定是遍历,暴力法可以实现,大不了,就是 n3 的时间复杂度嘛,不过这样肯定不合适,所以要继续优化先排序,然后遍历绝对是少不了的,所以这一步肯定跳不过去。我们一共需要三个数,第一个数通过遍历获得,这是时间复杂度是 n。另外两个数字通过两个指针获得,一个是左指针,一个是右指针,...原创 2020-02-24 11:56:48 · 346 阅读 · 0 评论 -
【LeetCode】 451. 根据字符出现频率排序
题目题目传送门:传送门(点击此处)题解首先需要考虑的是要记录每个字符字符出现的次数然后,根据出现的次数放入到数组中,数组大小为字符长度,最多可能出现字符长度次,如果两个字符出现的次数一样,就拼接起来倒序打印数组里面的字符就可以了这代码虽然不是很好看,但是思路还是比较清晰的class Solution { public String frequencySort(Stri...原创 2020-02-23 16:59:00 · 161 阅读 · 0 评论 -
【LeetCode】 172. 阶乘后的零
题目题目传送门:传送门(点击此处)题解思路这道题目得思路是找0,代码本来我想着是,每个除一次,就得出来结果了,但是这样会溢出class Solution { public int trailingZeroes(int n) { int count = 0; int mod = 5; while(n > 0){ ...原创 2020-02-23 16:34:50 · 92 阅读 · 0 评论 -
【LeetCode】 70. 爬楼梯
题目题目传送门:传送门(点击此处)题解典型的动态规划问题class Solution { public int climbStairs(int n) { if (n == 1) return 1; int[] dp = new int[n + 1]; dp[1] = 1; dp[2] = 2; for...原创 2020-02-22 20:25:46 · 99 阅读 · 0 评论