
LeetCode每日一题
文章平均质量分 62
LeetCode
okokabcd
这个作者很懒,什么都没留下…
展开
-
leetcode 287. Find the Duplicate Number 寻找重复数 (中等)
这道题给我们n+1个数,所有的数都在[1, n]区域内,首先让证明必定会有一个重复数,题目要求不能改变原数组,即不能给原数组排序,又不能用多余空间,那么hash的就不用考虑了,又要求时间小于O(n^2),只能考虑用二分搜索法了,在区间[1, n]中搜索,首先求出中点mid,然后遍历整个数组,统计所有小于等于mid的数的个数,如果个数小于等于mid,则说明重复值在[mid+1, n]之间,反之,重复值在[1, mid-1]之间,然后依次类推,直到搜索完成,此时的low就是我们要求的重复值。原创 2022-10-25 23:42:11 · 895 阅读 · 0 评论 -
leetcode 191. Number of 1 Bits 位1的个数(简单)
思路1:n & 1如果为1,ans=ans+1,然后再n向右移一位,直到n=0,返回ans。注意:因为是Java实现所以要用for思路2:先判断如果n!=0,ans++,令n = n&(n-1),循环直到n=0,返回ans原创 2022-10-24 23:18:20 · 106 阅读 · 0 评论 -
leetcode 15. 3Sum 三数之和(中等)
sortfind,整个数组排序O(NlogN),以示例1为例,先排序为[-4, -1, -1, 0, 1, 2],定义一个a遍历,再遍历求b,c,此时令b等于a接下来的第一个元素,c为最后一个元素,判断a+b+c0时令c-1.原创 2022-10-23 13:27:14 · 109 阅读 · 0 评论 -
leetcode 450. Delete Node in a BST 删除二叉搜索树中的节点 (中等)
这道题让我们删除二叉搜索树中的一个节点,难点在于删除完节点并补上那个节点的位置后还应该是一棵二叉搜索树。被删除掉的节点位置,不一定是由其左右节点补上,原创 2022-10-21 19:16:41 · 177 阅读 · 0 评论 -
leetcode 380. Insert Delete GetRandom O(1) O(1) 时间插入、删除和获取随机元素 (中等)
这道题有个限制在常数时间范围内实现插入删除和获得随机数操作,没有该限制的话直接用一个HashSet就可以搞定。我们利用一个可变list和一个HashMap,其中list用来保存数字,HashMap用来建立每个数字和其在list中的位置之间的映射。重点在于删除元素的逻辑,如果要删除的元素不存在返回false,如果存在,先求出该元素在list中的索引,将list中最后一个元素更新到此位置,同时更新该元素中在hashmap的索引,然后list中删除最后一个元素,hashmap也删除要删除的元素 。原创 2022-10-18 23:07:46 · 181 阅读 · 0 评论 -
leetcode 146. LRU Cache LRU 缓存 (简单)
LRU是Least Recently Used的简写,是最近最少使用的意思。这个缓存器主要实现两个方法,get和put。我们用List来存储缓存数据,用map来存储key与value的映射,实现get时,通过map取出当前值,并在list中将该值置为第1个实现put时,分2种情况,第1种缓存原创 2022-10-14 20:49:35 · 665 阅读 · 0 评论 -
leetcode 220. Contains Duplicate III 存在重复元素 III(困难)
这道题关注与不同值之间的关系,有两个限制条件,两个数字的坐标差不能大于k,值差不能大于t。还是用map结构来记录值和下标的映射。这里定义两上变量i和j,开始都指向0,然后i开始向右遍历数组,如果i和j之差大于k,且map中有nums[j],则删除并j+1,这样保证了map中所有的数的下标之差都不大于k,然后我们检查如果有值差小于等于则返回true。遍历最后返回false。原创 2022-10-13 13:14:59 · 352 阅读 · 0 评论 -
leetcode 219. Contains Duplicate II 存在重复元素 II(简单)
本来要刷210.存在重复元素III的,发现上一题就是II,于是就先刷这题了。这道题限制了数组中只许有一组重复的数字,而且其坐标差不能超过k。用map来解决,定义一个map,来记录每个数字和其坐标的映射,然后遍历这个数组,判断map中是否存在当前数的坐标,如果存在判断已存在的坐标对应的数与当前数的差是否超过k。原创 2022-10-12 13:38:58 · 274 阅读 · 0 评论 -
leetcode 785. Is Graph Bipartite判断二分图 (中等)
利用队列和广度优先搜索,我们可以对未染色的节点进行染色,并且检查是否有颜色相同的相邻节点存在,在代码中我们用0表示未检查的节点,用1和2表示两种不同的颜色原创 2022-10-11 13:15:22 · 119 阅读 · 0 评论 -
leetcode 236. Lowest Common Ancestor of a Binary Tree 二叉树的最近公共祖先(中等)
这是 二叉搜索树的最近公共祖先 这题的衍生题,这道题是普通的二叉树,不是二叉搜索树,所以就不能利其特有的性质,只能在二叉树中来搜索p和q,然后从路径中找到最后一个相同的节点即为父节点,可以用递归来实现,在递归函数中,首先看当前节点是否为空,若为空则直接返回空;若为p或q中的任一个,也直接返回当着节点;否则的话就对其左右子节点分别调用递归函数。原创 2022-10-10 12:58:14 · 659 阅读 · 0 评论 -
leetcode 145. Binary Tree Postorder Traversal 二叉树的后序遍历 (中等)
分析一下用非递归方法的思路:跟前序、中序、层序一样都要用到栈,后序的顺序是左 右 根,所以当一个节点值被取出来时,它的左右子节点要么不存在,要么已经被访问过了。先将根结点压入栈,然后定义一个辅助结点 head,while 循环的条件是栈不为空,在循环中,首先将栈顶结点t取出来,如果栈顶结点没有左右子结点,或者其左子结点是 head,或者其右子结点是 head 的情况下。原创 2022-10-09 18:06:27 · 326 阅读 · 0 评论 -
leetcode 94. Binary Tree Inorder Traversal 二叉树的中序遍历(中等)
二叉树的中序遍历顺序为左 根 右,可以用递归和非递归来解。递归解法十分直接,对左了节点调用递归函数,根节点访问值,右子节点再调用递归函数。非递归有两种方法,一种使用栈:从根节点开始,先将根节点压入栈,然后再将其所有左节点压入栈,然后取出栈顶节点,保存节点值,再将当前指针移到其右子节点上,若存在右子节点,则在下次循环时又可将其所有左子节点压入栈中,这样就保证了访问顺序为左 根 右。原创 2022-10-08 19:23:43 · 676 阅读 · 0 评论 -
leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树(中等)
要求从中序和后序遍历的结果来重新建原二叉树,中序遍历顺序是左 根 右,后序遍历顺序是左 右 根,对于这种树的重建一般采用递归来做,由于后序的顺序的最后一个肯定是根,所以原二叉树的根节点可以知道原创 2022-10-07 23:56:55 · 108 阅读 · 0 评论 -
leetcode 889. Construct Binary Tree from Preorder and Postorder Traversal 根据前序和后
先序遍历顺序是根左右,后序遍历顺序是 左右根,要建立树,肯定要从根节点开始创建,然后再创建左右子节点,根据先序和后序的特点,根节点的位置是固定的,即是先序遍历的第一个,又是后序遍历的最后一个,知道了根节点位置,我们需要分隔左右子树的区间。原创 2022-10-06 16:46:19 · 343 阅读 · 0 评论 -
leetcode 530. Minimum Absolute Difference in BST二叉搜索树的最小绝对差 (简单)
这道题给我们一棵二叉搜索树,让我们求任意个节点值之间的最小绝对差。由于BST的左原创 2022-10-05 13:24:08 · 87 阅读 · 0 评论 -
leetcode 235. Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最近公共祖先(简单)
求二叉树的最小共同父节点,可以用递归来求解,同志二叉搜索树的特点是左 < 根 < 右,所以根节点的值一直都是中间值,大于左子树的所有节点值,小于右子树的所有节点值,我们可以做如下判断,如果根节点的值大于 p 和 q 之间的较大值,说明 q 和 q 都在左子树中,那么此时我们就进入根节点的左子节点继续 uxjv,如果根节点小于 p 和 q 之间的较小值,说明 p 和 q 都在右子树中原创 2022-10-04 11:47:29 · 193 阅读 · 0 评论 -
leetcode 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树(简单)
可以将中序遍历左根右的顺序逆过来,变成右根左的顺序,这样可以反向计算累加和sum,同时更新节点值。原创 2022-10-01 23:58:11 · 129 阅读 · 0 评论 -
leetcode 513. Find Bottom Left Tree Value 找树左下角的值 (简单)
求二叉树的最左下树节点的值,也就是最后一行左数第一个值,可以用先序遍历来做,维护一个最大尝试和该尝试的节点值,由于先序遍历遍历的顺序是根左右,所以每一行最左边的节点肯定最先先遍历到,由于是新一行,那么当前尝试肯定比之前的最大深度大,所以可以更新最大深度为当前深度,节点值res为当前节点值,这样在遍历到该行其他节点时就不会更新res了原创 2022-09-30 18:56:58 · 922 阅读 · 0 评论 -
leetcode 226. Invert Binary Tree 翻转二叉树(简单)
翻转二叉树是树的基本操作之一,可以使用递归和非递归两种方法。递归方法:交换当前左右节点,并直接调用递归即可。原创 2022-09-29 22:21:22 · 558 阅读 · 0 评论 -
leetcode 572. Subtree of Another Tree 另一棵树的子树 (简单)
思路1:子树必须是从叶节点开始的,中间部分的不能算是子树,转换一下思路,从root的某个节点开始,就跟subRoot的所有结构都一样,那么问题就转换成了判断两棵树是否相同原创 2022-09-28 13:12:56 · 95 阅读 · 0 评论 -
leetcode 617. Merge Two Binary Trees 合并二叉树(简单)
直接用递归调用给定函数,先判断如果root1为空返回root2,如果root2为空返回root1,都存在的情况下建立新节点node,然后对root1和root2的左子节点调用递归并赋给node的左子节点,再对root1和root2的右子节点调用递归并赋给node的右子节点,返回node即可。原创 2022-09-27 13:00:20 · 144 阅读 · 0 评论 -
leetcode 208. Implement Trie (Prefix Tree) 实现 Trie (前缀树) (中等)
字典树的插入、删除和查找都不难,用一个一重循环即可,即第i次循环找到前i个字母所对应的子树,然后进行相应的操作。实现这棵字母 树,可以用最常见的数组保存即可(静态开辟内存)。至于节点对儿子的指向,一般有三种方法:原创 2022-09-26 13:07:26 · 137 阅读 · 0 评论 -
leetcode 669. Trim a Binary Search Tree 修剪二叉搜索树 (简单)
什么是二叉查找树?二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树:对于每个父节点,其左子树中所有节点的值小于等于父节点的值,其右子树中所有节点的值大于等于父节点的值。利用二叉查找树的大小关系,我们可以很容易地利用递归进行树的处理。原创 2022-09-24 19:53:16 · 127 阅读 · 0 评论 -
leetcode 144. Binary Tree Preorder Traversal 二叉树展开为链表(中等)
二叉树的遍历,常见的有先序遍历、中序遍历、后序遍历和层序遍历,它们用uxjv实现起来都非常简单;考虑使用非递归来实现,用到时stack来辅助转自,由于先序遍历的顺序为 根左右原创 2022-09-23 13:12:39 · 547 阅读 · 0 评论 -
leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(中等)
本题要求用先序和中序遍历来建立二叉树,由于先序的顺序的第一个肯定是根,所以原二叉树的根节点可以知道,题目中给了一个很关键的条件就是树中没有相同元素,有了这个条件就可以在中序遍历中也定位出根邛的位置,并以根节点的位置将中序遍历拆分为左右两个部分,分别对其递归调用原函数。原创 2022-09-22 13:30:24 · 137 阅读 · 0 评论 -
leetcode 637. Average of Levels in Binary Tree 二叉树的层平均值(简单)
求一个二叉树每层的平均值,利用广度优先搜索,我们可以很方便地求取每层的平均值。直接使用queue,直接将每层的值累计加起来除以该层的节点个数,存入结果ans中即可。原创 2022-09-15 21:16:55 · 503 阅读 · 0 评论 -
leetcode 1110. Delete Nodes And Return Forest 删点成林(中等)
二叉树的题首先想到用递归,递归方法传递4个参数,当前节点;是否是根节点(如果是根节点、且存在左右子树才会形成新树);再传递一个hashset用来存储要删除的节点,达到常数据级搜索;还有一个保存结果的list。原创 2022-09-14 14:11:39 · 316 阅读 · 0 评论 -
leetcode 110. Balanced Binary Tree 平衡二叉树(简单)
思路:定义一个求各个节点深度的函数,然后中每个节点的两个子树来比较深度差,针对每个点都会被计算深度时访问一次进行优化,如果发现子树不平衡,则不计算具体的深度,而是直接返回-1,优化后的谅赤:对于每一个节点,通过checkDepth方法递归获得左右子树的深度,如果子树是平衡的,则返回真实的深度,若不平衡,直接返回-1。原创 2022-09-13 12:53:20 · 142 阅读 · 0 评论 -
leetcode 437. Path Sum III 路径总和 III(中等)
双层递归实现,注意分情况考虑:1、如果选取该节点加入路径,则之后必须继续加入连续节点,或停止加入节点;2、如果不选取该节点加入路径,则对其左右节点进行重新考虑。因此一个方便的方法是我们创建一个辅函数,专门用来计算连续加入节点的路径。原创 2022-09-08 20:18:08 · 218 阅读 · 0 评论 -
leetcode 101. Symmetric Tree 对称二叉树(简单)
(1)如果两个子树都为空指针,则它们相等或对称(2) 如果两个子树只有一个为空指针,则它们不相等或不对称(3)如果两个子树根节点的值不相等, 则它们不相等或不对称(4)根据相等或对称要求,进行递归处理。原创 2022-09-07 13:13:50 · 208 阅读 · 0 评论 -
leetcode 114. Flatten Binary Tree to Linked List 二叉树展开为链表(简单)
思路:非迭代版实现,从根节点开始出发,先检测其左子节点是否存在,如存在则将根节点和其右节点断开,将左子节点及其后面所有结构一起连接到右子节点的位置,把原右子节点连到原左子节点为最后面的右子节点之后。原创 2022-09-06 16:04:14 · 143 阅读 · 0 评论 -
leetcode 83. Remove Duplicates from Sorted List 删除排序链表中的重复元素(简单)
思路:如果下一个元素和当前元素的值相等,这个元素的下个元素就等于下个元素的下个元素,继续循环。原创 2022-09-04 18:54:19 · 341 阅读 · 0 评论 -
leetcode 148. Sort List 排序链表(中等)
用快慢指针将列表分成两部分,将两部分列表递归排序,再将排序后的列表合并原创 2022-09-04 18:20:54 · 265 阅读 · 0 评论 -
leetcode 21. Merge Two Sorted Lists 合并两个有序链表(简单)
还是分递归和迭代两种思路来实现,要理解链表原创 2022-09-02 13:04:05 · 112 阅读 · 0 评论 -
leetcode 206. Reverse Linked List 反转链表(简单)
用迭代和递归来实现,迭代思路:在原镮之前建立一个空的prev节点,因为首节点会变,从head开始,将之后的一个节点移到prev之后,重复此操作直到head成为末节点为止原创 2022-09-01 20:35:44 · 249 阅读 · 0 评论 -
leetcode 409 Longest Palindrome 最长回文串(简单)
思路:先统计每个字符出现的次数,再遍历统计后的字符次数,如果是偶数次,那么一定可以是回文字符串的一部分,加上该次数;如果是奇数n字,那么加上n-1次;最后判断如果出现过奇数次的字符,那么最后结果加1。...原创 2022-08-31 13:22:40 · 690 阅读 · 0 评论 -
leetcode 28. Implement strStr() 实现 strStr()(简单)
思路2:遍历线字符串,只需要遍历m-n长度即可,这样可以提高运算效率。然后对每个字符,都遍历一遍子字符串,一个一个字符的对应比较,如果对应位置有不等的,则跳出循环,如果一直没有跳出循环,则说明子字符串出现了,返回起始位置即可。...原创 2022-08-30 12:56:28 · 95 阅读 · 0 评论 -
leetcode 227. Basic Calculator II 基本计算器 II(中等)
如果我们在字符串左边加上一个加号,可以证明其不改变运算结果,且字符串可以分割成多个对子的形式;这样一来我们就可以从左往右处理了。由于乘除的优先级高于加减,因此我们需要使用一个中间变量来存储高优先度的运算结果。...原创 2022-08-29 13:11:23 · 152 阅读 · 0 评论 -
leetcode 696. Count Binary Substrings 计数二进制子串(简单)
还可以从字符串的每个位置开始,向左向右延长,判断存在多少当前位置为中轴的由01连续二进制字符串。原创 2022-08-28 21:47:53 · 590 阅读 · 0 评论 -
leetcode 647. Palindromic Substrings回文子串(中等)
我们可以从字符串的每个位置开始,向左向右延长,判断存在多少当前位置为中轴的回文字符串。原创 2022-08-27 21:53:30 · 89 阅读 · 0 评论