代码随想录学习笔记
文章平均质量分 83
根据每日学习情况更新,题目和顺序与代码随想录一致,增加了力扣可通过的超全注释的代码、解题的整体思路、算法的具体流程、容易产生bug的算法注意点和语法注意点。
守岁白驹hh
HQU
展开
-
代码随想录:哈希表相关题目推荐(49、438、350)
给你一个字符串数组,请你将组合在一起。可以按任意顺序返回结果列表。是由重新排列源单词的所有字母得到的一个新单词。strs =原创 2024-05-21 12:37:25 · 262 阅读 · 0 评论 -
代码随想录:螺旋矩阵II相关题目推荐(54、LCR146)
给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。n = 3。原创 2024-05-14 10:29:51 · 404 阅读 · 0 评论 -
代码随想录:长度最小的子数组相关题目推荐(904、76)
题目看着很绕,其实就要找一个最大的连续数组(数字种类小于等于2)而已。查找方法就是用滑动窗口,left和right固定。然后,right遍历水果数组,把right种类put到哈希表中(key是水果种类,value是出现次数)。map存储的是当前left和right窗口中的水果种类和对应的数量。如果map的大小>2,即水果种类大于2,就要缩小窗口,修改map,map中key为left的value减1。如果value为0,直接把left从map中remove。然后,left右移,直到size小于2。原创 2024-05-13 12:14:00 · 547 阅读 · 0 评论 -
代码随想录:移除元素相关题目推荐(26、283、844)
核心是快慢指针,快指针进行遍历,指向带判断的元素,slow指向前一个被插入的元素,用于和fast进行比较。如果相同,fast往后走,如果不同,把fast插入slow+1位置,slow后移,fast后移。核心还是fast和slow指针。fast指向带判断的元素,对nums进行遍历,slow指向待插入元素的位置。如果fast是0,fast++后移继续判断。如果fast不是0,就把fast插入slow,然后slow后移指向新的待插入元素位置,fast后移继续判断。原创 2024-05-10 10:15:15 · 522 阅读 · 0 评论 -
代码随想录:二分查找相关题目推荐(69、367)
给你一个非负整数x,计算并返回x的。由于返回类型是整数,结果只保留,小数部分将被不允许使用任何内置指数函数和算符,例如或者x ** 0.5。x = 42x = 828 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。原创 2024-05-09 11:43:36 · 186 阅读 · 0 评论 -
代码随想录:二分查找相关题目推荐(35、34)
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1:nums = [[3,4]示例 2:nums = [[-1,-1]示例 3:[-1,-1]原创 2024-05-08 11:40:30 · 274 阅读 · 0 评论 -
代码随想录:二叉树31-33
改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。排列,请你将其转换为一棵平衡二叉搜索树。通过修剪二叉搜索树,使得所有节点的值在。的新值等于原树中大于或等于。给你二叉搜索树的根节点。原创 2024-04-29 20:38:03 · 142 阅读 · 0 评论 -
代码随想录:二叉树29-30
对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。,新值和原始二叉搜索树中的任意节点值都不同。给定二叉搜索树(BST)的根节点。给定一个二叉搜索树的根节点。,删除二叉搜索树中的。原创 2024-04-28 18:18:13 · 530 阅读 · 0 评论 -
代码随想录:二叉树25-28
给你一个含重复值的二叉搜索树(BST)的根节点root,找出并返回 BST 中的所有(即,出现频率最高的元素)。如果树中有不止一个众数,可以按返回。[2]原创 2024-04-28 16:34:04 · 827 阅读 · 0 评论 -
代码随想录:二叉树22-24
返回以该节点为根的子树。如果节点不存在,则返回。差值是一个正数,其数值等于两值之差的绝对值。,判断其是否是一个有效的二叉搜索树。你需要在 BST 中找到节点值等于。给定二叉搜索树(BST)的根节点。给你一个二叉搜索树的根节点。给你一个二叉树的根节点。原创 2024-04-26 11:09:03 · 374 阅读 · 0 评论 -
代码随想录:二叉树18-21(Java)
是同一棵树的后序遍历,请你构造并返回这颗。,请构造二叉树并返回其根节点。是二叉树的中序遍历,原创 2024-04-25 17:33:23 · 240 阅读 · 0 评论 -
代码随想录:二叉树15-17
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。的路径,这条路径上所有节点值相加等于目标和。等于目标和的根节点到叶节点路径如上图所示。路径总和等于给定目标和的路径。假设二叉树中至少有一个节点。和一个表示目标和的整数。,返回所有左叶子之和。是指没有子节点的节点。是指没有子节点的节点。原创 2024-04-25 15:16:24 · 339 阅读 · 0 评论 -
代码随想录:二叉树13
1.前序递归回溯前序递归回溯的逻辑是,用path存储单条路径,用result存储所有路径。先处理中间节点,加入到path中。终止条件是遇到叶子节点,就把path转为对应的String并添加到result中。单层逻辑是,分别递归回溯处理每个左右孩子。原创 2024-04-20 15:33:07 · 536 阅读 · 0 评论 -
代码随想录:二叉树9-10(二叉树的深度)
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。是指从根节点到最远叶子节点的最长路径上的节点数。给定一个 N 叉树,找到其最大深度。给定一个二叉树,找出其最小深度。叶子节点是指没有子节点的节点。原创 2024-04-18 18:05:04 · 317 阅读 · 0 评论 -
代码随想录:二叉树6-8
翻转二叉树可以用前序、后序、层序遍历,一边遍历时一边翻转当前遍历节点的左右指针即可。对比单纯的遍历二叉树,就是把遍历节点值add到result的操作,修改为swap(cur)即可。所以只要熟练二叉树的递归和迭代遍历,加上想清楚这道题在遍历时增加什么操作即可。核心算法还是二叉树的遍历。原创 2024-04-18 12:07:39 · 342 阅读 · 0 评论 -
代码随想录:二叉树5(层序遍历全解)
第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历), 以数组的形式返回每一层节点的平均值。(即逐层地,从左到右访问所有节点)。因此返回 [3, 14.5, 11]给定一个非空二叉树的根节点。以内的答案可以被接受。原创 2024-04-17 12:21:37 · 351 阅读 · 0 评论 -
代码随想录:二叉树2-4
1.递归的核心要确定三个点:①递归函数的形参是什么,用到什么参数:根节点指针+遍历返回的数据列表②递归的终止条件是什么:访问到空节点③递归的一层是什么逻辑:先获取中间节点元素,再访问左子孩子,最后访问右子孩子。2.迭代法的逻辑如下:中间节点先入栈,然后中间节点出栈时,连续执行三个操作,add中,如果右子节点非空把右进栈,如果左子节点非空把左进栈。以123为例,1作为根节点(中间节点)先入栈。原创 2024-04-12 11:28:46 · 697 阅读 · 0 评论 -
代码随想录:栈与队列4-6
1.思想要判断左右括号匹配,优先用栈来解决。大致算法是,如果是左括号就让其进栈,如果是右括号就把栈顶元素取出来匹配一下,如果不匹配就返回false,匹配就把栈底元素出栈。不过要把所有不匹配的情况考虑清楚:(1)第一种:左括号多,那么for循环结束之后的栈是非空的(2)第二种:右括号多,那么遍历到右括号时栈已经是空了(3)第三种就:左右括号数量匹配但是内容不匹配。还有要想一下,如何做左右括号的匹配,其实就是让左括号进栈的时候,替换为对应的右括号就行。2.算法流程。原创 2024-04-10 18:44:56 · 640 阅读 · 0 评论 -
栈与队列(Java中的栈和队列如何定义)
Stack/Queue/Deque/ArrayDeque/LinkedList原创 2024-04-10 13:16:54 · 1099 阅读 · 0 评论 -
代码随想录:栈与队列2-3
1.思路队列的队尾输入元素,队头输出元素。那么,可以用一个输入栈,模拟队列的输入,用一个输出栈,模拟队列的输出。而且,输入栈的元素和队列的队尾输入元素顺序一致。但输出栈的元素如果要和输入顺序一致,需要从输入栈从移入。下面举例说明了如何用输入栈和输出栈模拟队列,以及两个栈的元素如何移动。2.算法流程(1)push函数直接in.push(x)即可,把队列的队尾元素push到in栈内。(2)pop函数由于输入栈的元素顺序不是我们想要的输出顺序,因此要把in栈的元素pop出来再push到out栈里。原创 2024-04-09 12:16:46 · 699 阅读 · 0 评论 -
代码随想录:字符串5-7
1.思想题目要求右旋字符串,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。那么可以分为3个步骤,首先翻转整个字符串,变成"gfedcba",然后,翻转前k个字符,变成"fgedcba",最后,翻转后面剩下的字符,变成"fgabcde2.算法流程首先,需要先用Scanner获取输入的k和字符串s,然后new一个StringBuild对象,在其上进行三种reverse的操作(因为String类型不能修改)。原创 2024-03-30 19:03:09 · 1010 阅读 · 0 评论 -
代码随想录:字符串1-4
1.原理题目要求是把char数组进行翻转,直观理解就是把头尾元素交换,一直向中间移动,可以用双指针实现。2.算法流程用left指向第一个元素,right指向数组最后一个元素,交换left和right指向的元素,然后left++右移,right--左移,直到不满足left原创 2024-03-29 22:31:07 · 752 阅读 · 0 评论 -
代码随想录:链表6-8
1.思想:要删除倒数第n个节点,就让fast先走n步,然后slow和fast一起走,直到fast指向最后一个节点,此时slow指向的正好是待删除节点的前一个节点。2.注意点:fast.next!= null,不能少next,因为fast要指向最后一个节点时,slow指向待删除节点的前一个,fast如果指向null了,slow已经是要删除的节点了,多走了一步。1.思想:要找到两个链表何时相交,返回相交的节点。原创 2024-03-25 12:57:45 · 510 阅读 · 0 评论 -
代码随想录:哈希表7-9
1.原理(1)为什么用hash表题目的核心是判断r的每个小写字母是否在s中出现。其实就是r包含于s中。和字母异位词题目类似。(2)为什么用数组hash小写字母长度受限(3)算法流程初始化一个长度为26的int型hash数组,默认值为0。先变量字符串r,每一个字符,都让对应的hash值--。再遍历字符串s,每一个字符,都让对应的hash值++。最后,遍历hash数组,如果存在值小于0的,说明r比较多,s不够了,返回false。最后hash数组全大于等于0,返回true。2.语法问题。原创 2024-03-27 17:30:45 · 916 阅读 · 0 评论 -
代码随想录:哈希表2-6
1.原理(1)核心判断原则:判断s和t字母异位次,就是要求字母只能出现顺序不一样,字母的类型和对应的出现次数都要一致。(2)为什么想到用哈希表:哈希表主要用于判断某个元素在集合中是否出现or存在。而这里判断s和t的字母是否一样(类型和次数),类型是否相同相当于在hash表中判断字母是否出现,次数是否一样可以用hash值的加减来控制。(3)为什么用数组哈希:使用数组哈希的条件是hash表的长度受限,且hash值是连续的。这里s和t都是小写字母,只有26情况,满足长度受限的条件。原创 2024-03-26 21:07:56 · 619 阅读 · 0 评论 -
代码随想录-链表2-5
1.原理需要创造虚拟头结点,方便对头结点删除。创造pre指向前身和cur指向当前节点,遍历列表,访问cur的val值,如果不等于val,pre和cur就一直向后移动,如果等于val,让pre执行cur的下一个节点。直到cur的指针为空结束遍历。2.算法注意点:(1)要创造虚拟头结点方便操作;(2)遍历终止的条件是当前节点cur==null,而不是cur.next==null,因为要对最后一个节点进行访问判断的时候,cur.next已经是空了,当最后一个节点访问结束,cur才是空;原创 2024-03-24 12:13:09 · 679 阅读 · 1 评论 -
代码随想录力扣:数组1-6个人总结
题目给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。总结:1.原理:左指针left和右指针right包住数组的头尾,循环判断目标target和mid值的大小,如果mid大,说明target在区间右边,令right右移,如果mid小,说明targer在区间左边,令left左移,直到循环终止。原创 2024-03-22 21:32:21 · 666 阅读 · 1 评论