LeetCode
文章平均质量分 69
小白猿同学
在校大学生
展开
-
剑指Offer16 数值的整数次方
剑指Offer16 数值的整数次方题目描述实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n)。不得使用库函数,同时不需要考虑大数问题。分析暴力法由于题目要求不能使用库函数,根据简单的数学知识,我们有如下思路当 n=0 ,直接返回 1当 n>0 ,使用循环将x累乘n次当 n<0 ,把问题转化至 n>0的思路,即执行 x=1/x, n=-n如下代码1所示,这是最通俗易懂的思路,但是其时间复杂度很高O(n),在n较大的情况下会超时快速幂推导对原创 2022-02-24 17:18:11 · 376 阅读 · 0 评论 -
删去总和值为零的连续节点(前缀和)
删去总和值为零的连续节点(前缀和)题目描述 给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。OJ链接 来源:力扣(LeetCode)示例解决题目翻译由于题目比较难理解,所以首先将题目用通俗易懂的语言描述一下:将链表中和为的0 子链删除,直到不存在和为0的子链。如下图所示,由于子链3 -3和为0,所以,我们应当知道被断开子链表的前驱节点 2,将其连接到原创 2022-02-03 13:43:58 · 771 阅读 · 0 评论 -
二维数组中的查找
二维数组中的查找题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。LeetCode链接示例现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26原创 2022-01-09 23:53:26 · 433 阅读 · 0 评论 -
二叉树的深度
二叉树的深度二叉树的最小深度题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。**说明:**叶子节点是指没有子节点的节点。LeetCode链接分析首先对于树的问题,我们一般都会使用递归的方式解决对于本题,我们可以想到DFS来遍历整棵树,然后记录其最小深度因此,我们需要递归计算每一个非叶子节点的左右子树深度,取其最小值本题的递归条件分析如下:如果根节点为空,直接返回0如果左右孩子都为空,说明已经到叶子节点,返回1如果原创 2021-11-28 12:10:22 · 789 阅读 · 2 评论 -
最长递增子序列
最长递增子序列题目描述给你一个整数数组nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。方式1:暴力求解分析以a[1,5,2,4,3] 为例首先从1出发,若第二个元选择5,我们发现其后再没有比5大的元素,所以当前最长递增子序列长度为2,即[1,5]若从1出发,第二个元素找的是2,,第三个元素可以是4(3),则最长递增子序列长度为3,即[原创 2021-11-07 00:23:06 · 226 阅读 · 0 评论 -
LeetCode 15 三数之和
LeetCode 15 三数之和题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。OJ链接思路分析首先进行特例处理数组为空,直接返回空集合数组长度为0,直接返回空集合数组长度小于3(至少要三个数相加),直接返回空集合接着进行**升序**排序从最小值nums[i](已经升序排序)依次作为三元素中的**a**,进入循环如果a已经大于0,那么直接退原创 2021-09-30 19:01:26 · 96 阅读 · 0 评论 -
LeetCode 230 二叉搜索树中第K小的元素
LeetCode 230 二叉搜索树中第K小的元素题目描述给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。题目分析本题需要求出二叉搜索树中的第K小元素,我们之前介绍过二叉搜索树的性质:二叉搜索树的中序遍历结果是整个树节点的升序排序序列因此,我们可以借助中序遍历排完序后再找出其中第K小元素即可。解决方式1:递归中序遍历 public static int kthSmallest2(TreeNode root, i原创 2021-09-28 11:09:17 · 178 阅读 · 0 评论 -
LeetCode 字符串相加
LeetCode 两数相加题目1题目描述给定两个字符串形式的**非负整数** num1 和num2 ,计算它们的和并同样以字符串形式返回。链接你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。分析由于题目有一下要求:不能使用任何库函数不能直接将输入的字符串转换为整数形式并且如果直接使用数字相加可能出现越界问题,所以我们这里采用最基础的加法思路,即将两个数的对应位依次相加,如下所示,我们需要计算123+48首先,我们需原创 2021-09-25 18:16:01 · 326 阅读 · 0 评论 -
LeetCode 字符串转换整数(atoi)
LeetCode 字符串转换整数(atoi)题目描述请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)OJ链接函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将原创 2021-09-24 21:44:48 · 72 阅读 · 0 评论 -
剑指Offer 24 反转链表
剑指Offer 24 反转链表题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。LeetCode链接迭代法定义三个指针第一个指针prev,指向当前节点的前一个元素,最初是指向 NULL。第二个指针 cur ,最初指向 head。第三个指针为了保存cur的下一个节点,防止cur指向prev后造成断链。由于三变量演示图示过于密集,所以动画上只引入两个变量。 public ListNode reverseList(ListNode head)原创 2021-09-22 18:44:47 · 74 阅读 · 0 评论 -
leetCode环形链表
环形链表1 判断链表是否存在环1.1 题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。1.2 题目分析思路分析: 从同一头节点出发,因此我们可以分原创 2021-09-21 18:29:44 · 145 阅读 · 0 评论 -
DP求解 最大连续子数组和
DP求解 最大连续子数组和题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。1. 暴力求解思路分析:计算数组中每一个连续子数组的和,找出其中最大值 /** * 暴力求解 * @param nums * @return */ public int maxSubArray2(int[] nums) { int sum, max = Integer.MIN_VALUE;原创 2021-08-23 20:34:42 · 237 阅读 · 0 评论 -
股票的最大利润 (DP求解)
股票的最大利润 (DP求解)题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?LeetCode链接题目分析:根据示例,我们发现需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。暴力求解假设共有n天,第i天买入,第j天卖出,并且卖出价格必须大于买入价格,所以依次以第1天买入,第2 3 4….n天卖出,第2天买入,第3 4 5 6 …n天卖出,找出其中的最大值即可。 /**原创 2021-08-23 14:24:14 · 601 阅读 · 0 评论 -
DP求解 斐波那契数列 、青蛙跳台阶
DP求解 斐波那契数列 、青蛙跳台阶1. 斐波那契数列题目描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。LeetCode链原创 2021-08-23 11:30:48 · 458 阅读 · 1 评论 -
剑指Offer 26 树的子结构
剑指Offer 26 树的子结构题目描述: 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。LeetCode链接首先,这个题要和判断B树是不是A树的子树区分如下左图所示,t 既是s的子结构也是s的子树如下右图所示,t只是s的子结构而不是s的子树(因为t不包含s中以4为根节点子树的全部,即0号节点)**过程分析:**如果B是A的子结构,那么就需要判断A树中以任意一个节点为根的子树有没有包含B,因此原创 2021-08-21 22:36:08 · 154 阅读 · 2 评论 -
前序中序遍历构造二叉树
LeetCode 105 前序中序遍历构造二叉树1. 题目描述给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。LeetCode链接2. 分析之前已经分析过了前序遍历和中序遍历,我们可以知道前序遍历的第一个节点一定是根节点中序遍历的根节点两边分别是左右子树的中序遍历结果所以,我们可以按照以下步骤得到结果:先通过先序遍历找到当前树的根节点通过找到的根节点在中序遍历中查找,将其分为左右两个子树的中序遍历接着递归处理左右子树即可3原创 2021-08-13 12:37:00 · 258 阅读 · 0 评论 -
二叉搜索树与双向链表的转换
二叉搜索树与双向链表的转换1. 题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构4.你不用输出或者处理,示例中输出里面的英文,比如"From left to right are:"这样的,程序会根据你的返回值自动原创 2021-08-13 12:35:50 · 582 阅读 · 0 评论 -
12 LeetCode 236题 二叉树的最近公共祖先
LeetCode 236题 二叉树的最近公共祖先1. 题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大**(一个节点也可以是它自己的祖先)**。”链接此题的条件至关重要(尤其是**Node.val**互不相同,不然递归遍历无法求解)2. 题目分析题目已经给了最近公共祖先的定义,但是可能大家还是比较“懵”,我们通过上面的例原创 2021-08-05 18:55:27 · 55 阅读 · 0 评论 -
二叉树练习
二叉树面试题1. 判断两棵树是否相同题目描述:LeetCode链接给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。分析: 我们要判断两个树是否相同,我们首先就要判断其根节点是否相同,如果根节点相同再依次判断其左右孩子是否相同,如果左右孩子相同,再递归判断其左右孩子的左右孩子是否相同,以此类推。我们发现,这需要采用递归的方法来解决。综上,代码如下 public boolean isSameTree原创 2021-08-04 16:59:35 · 331 阅读 · 0 评论 -
11.层序遍历
层序遍历1. 题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。LeetCode链接2. 分析此题的层序遍历和之前的普通层次遍历不同,此题要求返回值为List<List>,即将每一层元素存储到一个List集合中,再将每一个List集合存储到一个大的集合中,示例可以很明显的看出。因此,我们每一行都需要创建一个集合来存储对应行的节点数据,根据之前的层次遍历思路,代码如下3. 代码 //定义存储结果的集合(集合中的每一元素为一个L原创 2021-08-03 21:33:27 · 101 阅读 · 0 评论 -
剑指 Offer 67. 把字符串转换成整数
剑指 Offer 67. 把字符串转换成整数int my_atoi(char *str){ //防止空指针 assert(str); //开头若不为数字或正负号返回0 if (isdigit(*str) && *str != '+' && *str != '-') { return 0; } //定义保存结果的变量 long long result = 0; //定义符号标志原创 2021-07-18 18:32:09 · 63 阅读 · 0 评论 -
LeetCode 27 移除元素
LeetCode 27 移除元素问题:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。解法一:由于题目要求删除数组中等于val 的元素,因此输出数组的长度一定小于等于输入数组的长度,我们可以把输出的数组直接写在输入数组上。我们可以遍历整个数组,如果数组中出现等于val的元素,将v原创 2021-07-18 18:28:27 · 97 阅读 · 0 评论 -
Leetcode相交链表
相交链表1.1 题目描述编写一个程序,找到两个单链表相交的起始节点。注意:如果两个链表没有交点,返回 null。在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。来源:力扣(LeetCode)1.2 解法一:暴力求解分析: 对链表A中的每一个结点,遍历整个链表 B ,检查链表 B 中是否存在结点和其相同,如果相同,则说明其为交点;代码省略1.3 解法二:双指针法1思路:创建两个遍历指针,其原创 2021-06-02 00:03:03 · 122 阅读 · 0 评论