![](https://img-blog.csdnimg.cn/20200921103319123.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
记录解题的思路
SunAlwaysOnline
开始工作的第3年!
展开
-
【leetcode.1572】矩阵对角线元素的和
一、题目描述给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。示例1:输入:mat = [[1,2,3], [4,5,6], [7,8,9]]输出:25解释:对角线的和为:1 + 5 + 9 + 3 + 7 = 25请注意,元素 mat[1][1] = 5 只会被计算一次。示例2:输入:mat = [...原创 2020-09-22 14:43:06 · 1691 阅读 · 0 评论 -
【leetcode.1464】数组中两元素的最大乘积
一、题目描述给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你计算并返回该式的最大值。示例 1:输入:nums = [3,4,5,2]输出:12解释:如果选择下标 i=1 和 j=2(下标从 0 开始),则可以获得最大值,(nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12 。示例 2:输入:nums = [1,5,4,5]输出:16解释:选择..原创 2020-09-21 20:32:45 · 921 阅读 · 1 评论 -
【leetcode.876】链表的中间结点
一、题目描述给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.n..原创 2020-10-07 22:01:36 · 265 阅读 · 0 评论 -
【leetcode.617】合并二叉树
一、题目描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:注意:合并必须从两个树的根节点开始。二、思路使用深度优先策略,遍历两颗二叉树的同一个位置,会出现以下情况两个节点都为null,则合并后的节点也为null两个节点都不为null,则创建一个新的节点,其值为...原创 2020-09-23 17:38:48 · 435 阅读 · 0 评论 -
【leetcode.559】N叉树的最大深度
一、题目描述给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个3叉树:我们应返回其最大深度,3。说明:树的深度不会超过1000。 树的节点总不会超过5000。二、思路采用深度优先搜索,递归获取子节点的最大深度,接着更新maxRootDepth即可。该方案的时间复杂度为O(N),N代表节点总数,空间复杂度为O(1)。 public int maxDepth(Node root) { ...原创 2020-09-23 15:06:15 · 368 阅读 · 0 评论 -
【leetcode.547】朋友圈(形象生动讲解并查集)
本文转载自Union-Find 算法详解今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣。说起这个 Union-Find,应该算是我的「启蒙算法」了,因为《算法4》的开头就介绍了这款算法,可是把我秀翻了,感觉好精妙啊!后来刷了 LeetCode,并查集相关的算法题目都非常有意思,而且《算法4》给的解法竟然还可以进一步优化,只要加一个微小的修改就可以把时间复杂度降到 O(1)。废话转载 2020-09-28 14:51:56 · 633 阅读 · 0 评论 -
【leetcode.455】分发饼干
分发饼干一、题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj。如果 sj>= gi,我们可以将这个饼干 j 分配给孩子...原创 2018-10-27 22:01:12 · 2633 阅读 · 0 评论 -
【leetcode.347】前 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是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任...原创 2020-09-24 20:47:18 · 305 阅读 · 0 评论 -
【leetcode.263】丑数
丑数一、要求编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数2, 3, 5的正整数。示例 1:输入: 6输出: true解释: 6 = 2 ×3示例 2:输入: 8输出: true解释: 8 = 2 × 2 ×2示例3:...原创 2018-11-03 13:17:00 · 1755 阅读 · 0 评论 -
【leetcode.235】二叉搜索树的最近公共祖先
一、题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出...原创 2020-09-27 13:52:39 · 341 阅读 · 1 评论 -
【leetcode.232】用栈实现队列
一、题目描述使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false...原创 2020-09-24 21:29:30 · 1203 阅读 · 0 评论 -
【leetcode.229】求众数Ⅱ
求众数Ⅱ一、要求给定一个大小为n的数组,找出其中所有出现超过⌊ n/3 ⌋次的元素。说明:要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。示例1:输入: [3,2,3]输出: [3]示例 2:输入: [1,1,1,3,3,2,2,2]输...原创 2018-11-04 16:18:05 · 1637 阅读 · 0 评论 -
【leetcode.226】翻转二叉树
一、题目描述翻转一棵二叉树。示例:二、题目背景Homebrew的作者Howell去面试谷歌惨遭拒绝,因为他不会翻转二叉树,即使谷歌公司90%的工程师都在使用他写的软件。之后LeetCode把这道题纳入了题库,并将难度标记为简单题...我要是会了这道题,那我可以进谷歌啊?当然,把这件事当做一个小故事看看算了。企业拒绝一个人才的原因有很多,我在知乎上看到一些很有意思的回答。如何评价 Homebrew 作者因为不会在白板上翻转二叉树而被谷歌面试拒绝?三、思路在这里放原创 2020-09-24 16:34:43 · 399 阅读 · 0 评论 -
【leetcode.200】岛屿数量
一、题目描述给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出:1示例2:输入:[['1','1','0','...原创 2020-09-27 19:44:50 · 671 阅读 · 0 评论 -
【leetcode.206】反转链表
反转链表一、要求反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?链表结点...原创 2018-10-06 21:39:52 · 8472 阅读 · 0 评论 -
【leetcode.198】打家劫舍
一、题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。...原创 2020-09-23 13:50:34 · 203 阅读 · 0 评论 -
【leetcode.191】位1的个数
本文转载自https://leetcode-cn.com/problems/number-of-1-bits/solution/wei-1de-ge-shu-by-leetcode/一、题目描述编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 ..转载 2020-10-02 17:14:54 · 481 阅读 · 0 评论 -
【leetcode.179】最大数
最大数一、要求给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例2:输入: [3,30,34,5,9]输出: 9534330说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数。二、思...原创 2018-11-04 17:17:26 · 3823 阅读 · 0 评论 -
【leetcode.160】相交链表,很有意思的一道题
一、题目描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表原创 2020-10-13 17:58:20 · 334 阅读 · 0 评论 -
【leetcode.141&142】环形链表及拓展
环形链表及拓展一、要求给定一个链表,判断链表中是否有环。进阶:你能否不使用额外空间解决此题?节点类: class ListNode { public int val; public ListNode next; ListNode(in...原创 2018-10-08 14:49:19 · 5441 阅读 · 0 评论 -
【leetcode.136】只出现一次的数字
只出现一次的数字一、要求给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2...原创 2018-11-02 20:07:26 · 1346 阅读 · 0 评论 -
【leetcode.118】杨辉三角
杨辉三角一、要求给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,...原创 2018-11-03 12:24:49 · 1824 阅读 · 0 评论 -
【leetcode.108】将有序数组转换为二叉搜索树
一、题目描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例:二、思路二叉搜索树,即对于其中任何一个结点node,其左子树上的节点值都小于等于node值,其右子树上的结点都大于等于node值,那么其中序遍历正好就是一个升序数组。题目要求这棵树是一个平衡树,因此树中任意一个节点左右两个子树的高度差不可以超过1。所以我们可以将数组最中间元素或紧靠中间左右两边的元素(即nums[.原创 2020-09-24 14:02:35 · 317 阅读 · 0 评论 -
【leetcode.106】从中序与后序遍历序列构造二叉树
一、题目描述根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:二、思路思路来源于图解构造二叉树之中序+后序,画得图是真心棒前提解决此问题的关键在于要很熟悉树的各种遍历次序代表的什么,最好能够将图画出来。本题解带你先进行中序遍历和后续遍历二叉树,然后再根据遍历结果将二叉树进行还原。首先,来.原创 2020-09-25 16:18:23 · 2967 阅读 · 0 评论 -
【leetcode.101】对称二叉树
一、题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的:进阶:你可以运用递归和迭代两种方法解决这个问题吗?二、思路所谓对称二叉树,即如下图所示:那么,对于任意一对结点p、q,都有这样的性质:p.left.val=q.right.val,p.right.val=q.left.val如果使用递归,我们大可以写出一个判断两个互为镜像位...原创 2020-10-15 20:04:56 · 442 阅读 · 2 评论 -
【leetcode.88】合并两个有序数组
一、题目描述给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,...原创 2020-09-21 18:02:01 · 338 阅读 · 0 评论 -
【leetcode.83】删除排序链表中的重复元素
一、题目描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3二、思路只要当前节点(currentNode)的值与下一个节点(currentNode.next)的值相同,则将currentNode指向currentNode.next.next。三、代码实现public class Nu..原创 2020-09-21 16:08:12 · 182 阅读 · 1 评论 -
【leetcode.78】子集
一、题目描述给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]二、思路方案1:枚举对于集合{1,2,3}的子集 首先,创建出来一个空集合[],加入到结果集中遍历数组中的元素: 拿到1,对现有的结果集([...原创 2020-09-22 16:45:46 · 282 阅读 · 0 评论 -
【leetcode.77】组合
一、题目描述给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]二、思路从1、2、3、4中选出两个数 如果已经选了1,则需要在2、3、4中再选出一个数即可 如果已经选了2,则需要在3、4中再选出一个数即可 依次类推,我们可以画出这样的一个树形结构:很明显,...原创 2020-09-23 00:52:06 · 245 阅读 · 0 评论 -
【leetcode.59】螺旋矩阵 II
一、题目描述给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]二、思路首先画出一个矩阵图,方便理解由二维数组的特性,同一排的x值相等,从左到右y值递增;同一列的y值相等,从上到下x值递增。顺时针旋转,那么走一圈的话,先是从左到右,接着从上到下,然后从右到左,最后从下到上。我们给矩阵指定方向,左边为left,上...原创 2020-09-21 19:52:31 · 654 阅读 · 0 评论 -
【leetcode.56】合并区间
合并区间一、要求给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:...原创 2018-11-03 20:53:13 · 5232 阅读 · 0 评论 -
【leetcode.53】最大子序和
最大子序和一、要求给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已...原创 2018-10-07 22:11:44 · 7252 阅读 · 0 评论 -
【leetcode.50】Pow(x,n)
Pow(x,n)一、要求实现pow(x,n),即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出:...原创 2018-11-03 21:50:18 · 1318 阅读 · 0 评论 -
【leetcode.46】全排列
全排列一、要求给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]二、思路进入初始方法中...原创 2018-11-04 22:45:47 · 1750 阅读 · 0 评论 -
【leetcode.21】合并两个有序链表
合并两个有序链表一、要求将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4二、解法(1)非递归实现...原创 2018-10-05 22:00:04 · 6525 阅读 · 0 评论 -
【leetcode.14】最长公共前缀
最长公共前缀一、要求编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解...原创 2018-11-02 21:20:11 · 1613 阅读 · 0 评论 -
【leetcode.5】最长回文子串
最长回文子串一、要求给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"二、解法这里我们采用动...原创 2018-10-06 14:50:35 · 5566 阅读 · 0 评论 -
【leetcode.3】无重复字符的最长子串
一、题目描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列...原创 2020-09-30 11:41:34 · 1110 阅读 · 0 评论 -
【leetcode.1】两数之和
两数之和一、要求给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = ...原创 2018-11-06 21:52:47 · 1101 阅读 · 0 评论 -
【leetcode】求众数
求众数一、题目描述给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输...原创 2018-10-27 21:53:12 · 8091 阅读 · 2 评论