
leetcode
一纸浮萍
浮于水面 扎于深潭
展开
-
Leetcode 59. 螺旋矩阵 II
题目给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]解答解法一:轮圈赋值解法与 螺旋矩阵 没有太大区别,只是反过来了而已。螺旋矩阵解法:https://blog.youkuaiyun.com/LetJava/article/detail...原创 2019-07-12 17:17:22 · 288 阅读 · 0 评论 -
Leetcode 66. 加一
题目给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。...原创 2019-07-12 17:42:15 · 132 阅读 · 0 评论 -
Leetcode 73. 矩阵置零
题目给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4...原创 2019-07-12 21:34:06 · 495 阅读 · 1 评论 -
Leetcode 74. 搜索二维矩阵
题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true示例 2:输入:matri...原创 2019-07-12 22:23:08 · 374 阅读 · 1 评论 -
Leetcode 75. 颜色分类
题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首...原创 2019-07-12 23:25:25 · 223 阅读 · 0 评论 -
Leetcode 80. 删除排序数组中的重复项 II
题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后...原创 2019-07-13 14:49:46 · 396 阅读 · 2 评论 -
Leetcode 11. 盛最多水的容器
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表...原创 2019-07-09 19:34:41 · 168 阅读 · 0 评论 -
Leetcode 26. 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nu...原创 2019-07-09 20:01:38 · 122 阅读 · 0 评论 -
Leetcode 27. 移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均...原创 2019-07-09 20:15:26 · 174 阅读 · 0 评论 -
Leetcode 81. 搜索旋转排序数组 II
题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums = ...原创 2019-07-13 16:15:02 · 203 阅读 · 0 评论 -
Leetcode 31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解答代码:class Solution { ...原创 2019-07-10 00:18:18 · 227 阅读 · 0 评论 -
Leetcode 88. 合并两个有序数组
题目给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 =...原创 2019-07-13 22:05:00 · 119 阅读 · 0 评论 -
Leetcode 105. 从前序与中序遍历序列构造二叉树
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:解答分为以下几步:如果左边界索引小于右边界索引,说明遍历序列为空,返回一个空树 null 。如果左边界索引等于右边界索引,说明到达叶子节点,直接创...原创 2019-07-14 00:28:07 · 232 阅读 · 0 评论 -
Leetcode 106. 从中序与后序遍历序列构造二叉树
题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:解法感觉跟 Leetcode 105. 从前序与中序遍历序列构造二叉树 差不多,换汤不换药。详情可以看我上一篇博客:https://blog.cs...原创 2019-07-14 00:46:32 · 627 阅读 · 0 评论 -
Leetcode 118. 杨辉三角
题目给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]解答很容易理解,可以看着下面代码理解下述步骤。具体为以下几步:对第一行特殊处理,相当于初始化,初始化第一行为 1 。从第二行开始:...原创 2019-07-14 01:25:30 · 146 阅读 · 0 评论 -
Leetcode 119. 杨辉三角 II
题目给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]进阶:你可以优化你的算法到 O(k) 空间复杂度吗?解答解法一:空间O(k^2)参考 Leetcode 118. 杨辉三角 ,拿到前 n 行, 返回最后一行就好了。详情在上一篇博客:https://blo...原创 2019-07-14 01:56:27 · 400 阅读 · 0 评论 -
Leetcode 2. 两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&...原创 2019-07-14 16:24:41 · 211 阅读 · 0 评论 -
Leetcode 19. 删除链表的倒数第N个节点
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?解答解法一:两趟扫描分为以下几步:首先扫描一遍计算链表长度,得到链...原创 2019-07-14 17:15:12 · 177 阅读 · 0 评论 -
Leetcode 21. 合并两个有序链表
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解答本题比较简单。要点有二:按照大小关系将链表的值加入到一个新链表里,直到有一条链表为 null 。将另一条链表剩余的结点直接挂载到新链表上即可...原创 2019-07-14 17:36:20 · 189 阅读 · 0 评论 -
Leetcode 23. 合并K个排序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6解答解法一:逐个遍历解法 O(nk)思路很简单,看主函数就行了。如果 lists 不是空,就弹出一个最小的结点。复...原创 2019-07-14 22:43:40 · 773 阅读 · 2 评论 -
Leetcode 24. 两两交换链表中的节点
题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.解答解法一:非递归创建一个虚拟头结点。声明 p,lt,gt 分别代表前驱结点,二者之左结点,二者之右节点。保证 p.next 和 p.next.n...原创 2019-07-14 23:20:14 · 204 阅读 · 0 评论 -
Leetcode 33. 搜索旋转排序数组
题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], ...原创 2019-07-10 22:56:56 · 372 阅读 · 0 评论 -
Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10]...原创 2019-07-10 23:53:10 · 131 阅读 · 0 评论 -
Leetcode 25. K 个一组翻转链表
题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2-...原创 2019-07-15 15:15:55 · 307 阅读 · 0 评论 -
Leetcode 61. 旋转链表
题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->...原创 2019-07-15 15:43:01 · 129 阅读 · 0 评论 -
Leetcode 82. 删除排序链表中的重复元素 II
题目给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3解答解法一:非递归方式p 是游标,不断的向后遍历寻找符合条件的位置...原创 2019-07-15 16:53:11 · 360 阅读 · 0 评论 -
Leetcode 83. 删除排序链表中的重复元素
题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3解答解法一:非递归代码中变量的含义:pre 代表有效链表的最后一个位置。p 是遍历指针,不断向前遍历链表。如果 p 指向...原创 2019-07-15 17:14:02 · 153 阅读 · 0 评论 -
Leetcode 41. 缺失的第一个正数
题目给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1说明:你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。解答困难题还是有难度的。要求 O(n) 时间, O(1)空间。最简单的解法是对数...原创 2019-07-11 16:57:57 · 133 阅读 · 0 评论 -
Leetcode 86. 分隔链表
题目给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5解答解法一:代码结果解法二:代码结果...原创 2019-07-15 23:20:04 · 189 阅读 · 0 评论 -
Leetcode 92. 反转链表 II
题目反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL解答具体步骤如下:先根据 m 的值找到翻转起始点的前驱结点 pre 。然后暂存翻转之...原创 2019-07-16 00:24:48 · 182 阅读 · 0 评论 -
Leetcode 48. 旋转图像
题目给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 m...原创 2019-07-11 17:44:06 · 153 阅读 · 0 评论 -
Leetcode 53. 最大子序和
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。解答解法一:暴力 O(n^2)两层 for 循环,对每一个位...原创 2019-07-11 20:25:20 · 576 阅读 · 0 评论 -
Leetcode 6. Z 字形变换
题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示...原创 2019-07-18 15:21:41 · 226 阅读 · 0 评论 -
Leetcode 54. 螺旋矩阵
题目给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10,11,12]]输出: [1,2,3...原创 2019-07-12 00:10:23 · 942 阅读 · 0 评论 -
Leetcode 8. 字符串转换整数 (atoi)
题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...原创 2019-07-18 18:17:46 · 163 阅读 · 0 评论 -
Leetcode 109. 有序链表转换二叉搜索树
题目给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:解答采用递归具体如下:使用快慢指针找到链表的中心点,将链表分为左右两个子链表。这两条子链的长度差不超过 1 , 保证了局部高度差不超过 1 。然后使用同样的规则分别对左子链表和右子链表递归,保证了整体高度差...原创 2019-07-16 14:34:16 · 143 阅读 · 0 评论 -
Leetcode 10. 正则表达式匹配
题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”...原创 2019-07-18 22:07:46 · 224 阅读 · 0 评论 -
Leetcode 138. 复制带随机指针的链表
题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。示例:输入:{" $ id":“1”,“next”:{" $ id":“2”,“next”:null,“random”:{" $ ref":“2”},“val”:2},“random”:{" $ ref":“2”},“val”:1}解释:<节点 1 的...原创 2019-07-16 17:16:37 · 205 阅读 · 0 评论 -
Leetcode 141. 环形链表
题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:...原创 2019-07-16 17:57:10 · 160 阅读 · 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:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。...原创 2019-07-12 14:42:58 · 290 阅读 · 0 评论