![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
一只_小青蛙
这个作者很懒,什么都没留下…
展开
-
LeetCode:不同的二叉搜索树 I II
不同的二叉搜索树 I题目描述:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:思路:二叉搜索树:左子树节点均小于根节点,右子树节点跟大于根节点。对于1-n为节点组成的二叉树来说,每一个数都有可能作为根节点。当 i 作为根节点时,左子树节点为1-(i-1),右子树节点为(i+1)-n;假如左子树有m种不同结构的二叉搜索树,右子树有n种,那么总共有 m*n 种。所以对于n个节点来说,原创 2020-07-22 15:27:22 · 269 阅读 · 0 评论 -
LeetCode:连续子数组的最大和
题目描述:输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100思路:遍历数组,因为当一个负数加上任意数,都会比这个数本身小。所以可以从nums原创 2020-07-19 21:15:45 · 563 阅读 · 0 评论 -
LeetCode :生命游戏
题目描述:根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个位置有超原创 2020-07-18 09:53:19 · 160 阅读 · 0 评论 -
LeetCode:复杂链表的复制
题目描述:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]示例 3:输入:原创 2020-07-16 17:55:59 · 152 阅读 · 0 评论 -
LeetCode:阶乘后的零
题目描述:给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。思路:求尾数中0的个数,即求阶乘中有多少个10,也就是有多少个2*5。5!=1*2*3*4*5;10!=1*2*3*4*5*6*7*8*9*10.从上边可以看出每当出现因数5时,前边总会有因数2与之匹配。比如 5!中5前边的原创 2020-07-07 08:54:36 · 163 阅读 · 0 评论 -
LeetCode:最长公共前缀
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。思路:纵向比较。查找最小字符串长度,从最左端开始比较,相同长度加一,否则停止比较。在比较时可借助哈希表,通过判断增加的个数是否是n的倍数来判断。class S原创 2020-06-23 09:39:13 · 129 阅读 · 0 评论 -
LeetCode:反转矩阵后的得分
题目描述:有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入: [[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出: 39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001原创 2020-06-21 16:48:57 · 147 阅读 · 0 评论 -
LeetCode:最长回文子串
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路1:动态规划。长度为1时,为回文串;长度为2时,如果两字母相同,为回文串;其他情况,如果s[i]==s[j]并且S[ i+1 : j-1 ]为回文串,那么s[ i : j]为回文串。class Solution {public: stri原创 2020-06-14 17:00:54 · 109 阅读 · 0 评论 -
LeetCode:把数组排成最小的数
题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102”示例 2:输入: [3,30,34,5,9]输出: “3033459”提示:0 < nums.length <= 100说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0思路:主要考察比较函数,之后在进行排序即可。对于 x,y,比较 x+y 与 y+x原创 2020-06-08 21:27:40 · 223 阅读 · 0 评论 -
LeetCode:加一
题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。思路:最后一位加一后,依次判断前一位是否也需要进位。注意最高位仍需进位的情况。class Solution {原创 2020-06-08 21:15:48 · 138 阅读 · 0 评论 -
LeetCode:丑数
题目描述:我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明: 1 是丑数。 n 不超过1690。思路:我们可以看出来每次都是前面某个数字乘以 2 或者 3 或者 5,取其中的最小者。我们定义三个指针 index2、index3、index5 分别指向要乘以 2、3、5 的数字。dp[i] 表示原创 2020-06-06 21:31:17 · 331 阅读 · 0 评论 -
LeetCode:股票的最大利润
题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。限制:0 <= 数组长度原创 2020-05-08 17:51:44 · 405 阅读 · 0 评论 -
LeetCode:两个链表的第一个公共节点
题目描述:输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为原创 2020-05-08 17:38:50 · 251 阅读 · 0 评论 -
LeetCode:和为s的两个数字
题目描述:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制...原创 2020-05-08 17:06:47 · 134 阅读 · 0 评论 -
LeetCode:二叉树的最近公共祖先
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3...原创 2020-05-08 15:31:20 · 96 阅读 · 0 评论 -
LeetCode:数组中超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000思路:摩尔投票法。假设所求数字的票数为+1,其余数字的票数为-1,那么所有数字的票数和为整数,此结论在分开计算时仍然成...原创 2020-05-08 15:21:23 · 330 阅读 · 0 评论 -
LeetCode:数组中重复的数字
题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000思路:哈希表。数组元素范围在0-n-1...原创 2020-05-08 15:09:59 · 150 阅读 · 0 评论 -
LeetCode:礼物的最大价值
题目描述:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[ [1,3,1], &n...原创 2020-05-08 15:06:23 · 334 阅读 · 0 评论 -
LeetCode:和为K的子数组
题目描述:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。思路:令nums数组中 0...原创 2020-05-08 14:56:27 · 341 阅读 · 0 评论 -
LeetCode:颜色分类
题目描述:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。...原创 2020-05-08 14:49:21 · 95 阅读 · 0 评论 -
LeetCode:二叉搜索树的最近公共祖先
题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root ...原创 2020-05-05 15:51:39 · 136 阅读 · 0 评论 -
LeetCode:重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:限制:0 <= 节点个数 <= 5000思路:前序遍历顺序为:根节点->左子树->右子树。中序...原创 2020-05-05 15:42:35 · 150 阅读 · 0 评论 -
LeetCode:和为s的连续正数序列
题目描述:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <...原创 2020-05-05 15:21:19 · 124 阅读 · 0 评论 -
LeetCode:用两个栈模拟队列
题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[nul...原创 2020-04-30 15:41:50 · 133 阅读 · 0 评论 -
LeetCode:二叉搜索树的第k大节点
题目描述:给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 13/ 1 42输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 35/ 3 6/ 2 4/1输出: 4限制:1 ≤ k ≤ 二叉搜索树元素个数思路:二叉搜索树左子树...原创 2020-04-28 20:51:52 · 379 阅读 · 0 评论 -
LeetCode:二进制中1的个数
题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:...原创 2020-04-28 20:45:57 · 185 阅读 · 0 评论 -
LeetCode:合并两个排序的链表
题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000思路:建立头结点。依次指向两个链表中较小的节点,被选中的节点后移一位。注意一个链表结束,另一个链表还有很长一段...原创 2020-04-28 20:10:07 · 125 阅读 · 0 评论 -
LeetCode:反转链表
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000思路:双指针。pre指针初始化为NULL,cur初始为首元结点。每次让cur->ne...原创 2020-04-28 20:05:47 · 79 阅读 · 0 评论 -
LeetCode:从尾到头打印链表
题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路:遍历链表,将其放在vector中,最后将vector反转。也可用stack进行中转。/** * Definition for singly-linked list. * st...原创 2020-04-28 19:54:39 · 147 阅读 · 0 评论 -
LeetCode:全排列
题目描述:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:将每个数字分别放在首位,然后将除首位之外的其他数字当做一个全新数组,再依次按上述方法处理,直到最后一个数字。class Solution {public: ...原创 2020-04-25 11:22:41 · 88 阅读 · 0 评论 -
LeetCode :前 K 个高频元素
题目描述:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大...原创 2020-04-11 16:24:47 · 177 阅读 · 1 评论 -
LeetCode:从上到下打印二叉树 I II III
对于给定二叉树:例如: [3,9,20,null,null,15,7],从上到下打印二叉树 I .从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。输出结果:[3,9,20,15,7]思路:对于层序遍历,利用队列对节点进行记录。对于每个节点将其左右子树放入队列,并将其弹出,以此达到一层一层输出的效果。/** * Definition for a binary t...原创 2020-04-09 20:44:45 · 197 阅读 · 0 评论 -
LeetCode:数组中数字出现的次数 II
题目描述:在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 2^31思路:位运算。从第一位...原创 2020-04-08 20:54:50 · 317 阅读 · 0 评论 -
LeetCode:二叉树的镜像
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:镜像输出:示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]思路1:递归实现。交换左右子树,再分别交换对左右子树进行镜像。/** * Definition for a binary tree node. * struct TreeNode { * ...原创 2020-04-08 20:37:26 · 154 阅读 · 0 评论 -
LeetCode: 链表中倒数第k个节点
题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.思路:双指针。第一个指针...原创 2020-04-08 20:21:25 · 564 阅读 · 0 评论 -
LeetCode:打印从1到最大的n位数
题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数思路:n位数最大为pow(10,n)-1。class Solution {public: vector<i...原创 2020-04-08 20:14:49 · 125 阅读 · 0 评论 -
LeetCode:二叉树的深度
题目描述:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。提示:节点总数 <= 10000思路1:先序遍历(DFS)递归实现,二叉树的深度为1+max(左子树深度...原创 2020-04-08 20:03:10 · 136 阅读 · 0 评论 -
LeetCode:左旋转字符串
题目描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlo...原创 2020-04-08 18:34:43 · 156 阅读 · 0 评论 -
LeetCode:求1+2+…+n
题目描述:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000思路1:利用等差数列求和公式:sum=n(n+1)/2=(n^2+n)/2;其中n^2用pow(n,2...原创 2020-04-08 18:16:39 · 293 阅读 · 0 评论 -
LeetCode:调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:1 <= nums.length <= 500001 <= nums[i] <= 10000思路一:(会改变其中偶...原创 2020-04-01 09:18:08 · 509 阅读 · 0 评论