![](https://img-blog.csdnimg.cn/20200204101416916.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode刷题
漫长的leetcode刷题之路
陈迹·清欢
这个作者很懒,什么都没留下…
展开
-
栈与队列的相互模拟(leetcode225&&leetcode232)
一、用队列实现栈1.1 Question使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty这些操作是合法的。 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 ,只要是标准的队列操作即可。 你可以原创 2020-05-11 21:16:39 · 185 阅读 · 0 评论 -
leetcode题目 162. 寻找峰值
题目峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2...原创 2020-02-29 10:46:14 · 354 阅读 · 0 评论 -
leetcode题目 389. 找不同
题目给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例输入:s = “abcd”t = “abcde”输出:e解释:‘e’ 是那个被添加的字母。思路一(耗时挺长的)先用HashMap统计t(t为较长的那个字符串)的字母频率,然后再遍历s的字母,遇到一个字母则把HashMap对应...原创 2020-02-26 10:24:37 · 176 阅读 · 0 评论 -
leetcode题目 380. 常数时间插入、删除和获取随机元素
题目设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。1、insert(val):当元素 val 不存在时,向集合中插入该项。2、remove(val):元素 val 存在时,从集合中移除该项。3、getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。示例// 初始化一个空的集合。RandomizedSet randomSet = new ...原创 2020-02-25 10:18:44 · 167 阅读 · 0 评论 -
leetcode题目 398. 随机数索引
题目给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。注意:数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。示例:int[] nums = new int[] {1,2,3,3,3};Solution solution = new Solution(nums);// pick(3) 应该返回索引 2,3 或者 4...原创 2020-02-24 11:52:55 · 261 阅读 · 0 评论 -
leetcode题目 400. 第N个数字
题目在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 个数字。注意:n 是正数且在32为整形范围内 ( n < 231)。示例示例 1:输入:3输出:3示例 2:输入:11输出:0说明:第11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是0,它是10的一部分。...原创 2020-02-23 20:54:40 · 254 阅读 · 0 评论 -
leetcode题目 367. 有效的完全平方数
题目给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。说明:不要使用任何内置的库函数,如 sqrt。示例示例 1:输入:16输出:True示例 2:输入:14输出:False思路我们发现,除了1,其他数的平方根总是小于这个数的一半,即num1/2<num/2。所以我们可以从[0,num/2]进行二分查找。(...原创 2020-02-22 11:08:54 · 277 阅读 · 0 评论 -
leetcode题目 328. 奇偶链表
题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。说明:1、应当保持奇数节点和偶数节点的相对顺序。2、链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。示例示例 1...原创 2020-02-21 10:57:28 · 221 阅读 · 0 评论 -
leetcode题目 347. 前 K 个高频元素
题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。说明:1、你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。2、你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。示例示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输...原创 2020-02-20 19:14:22 · 142 阅读 · 0 评论 -
leetcode题目 283. 移动零
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。说明1、必须在原数组上操作,不能拷贝额外的数组。2、尽量减少操作次数。示例输入: [0,1,0,3,12]输出: [1,3,12,0,0]思路使用双指针,指针i用来遍历输入数组,指针lastZeroIndex用来保存当前遍历中最后一个不为0的索引值。在循环中每找到一个不为0的数时,就...原创 2020-02-19 20:33:12 · 71 阅读 · 0 评论 -
leetcode题目 292. Nim 游戏
题目你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后...原创 2020-02-19 12:34:16 · 275 阅读 · 0 评论 -
leetcode题目 234. 回文链表(快慢指针+反转链表)
题目请判断一个链表是否为回文链表。用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题示例示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true思路首先使用快慢指针找到链表中点,然后翻转后半部分链表,再与前半部分对比。翻转链表请看:翻转链表。快慢指针:快慢指针是指使用两个指针slow和fast,sl...原创 2020-02-18 19:43:41 · 227 阅读 · 0 评论 -
原地反转链表(递归版+迭代版)(leetcode题目 206. 反转链表)
题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路一(迭代版)假设存在链表1->2->3->4,最直白的想法就是1<-2然后2<-3,3<-4。实际的思路也是如此,我们只需要一个维护pre和cur节点,pre用来保存上...原创 2020-02-18 12:01:23 · 177 阅读 · 0 评论 -
leetcode题目 148. 排序链表
题目在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路(自底向上的两路归并排序)不了解归并排序的思想的可以先去看看其...原创 2020-02-17 16:54:29 · 221 阅读 · 1 评论 -
判断一棵树是否是平衡二叉树(leetcode题目 110)
平衡二叉树就是对每一个节点而言,高度差在1以内(包括1)。所以我们只需要求得每棵子树高度,然后判断是否合理即可。public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public boolean isBalance...原创 2020-02-16 12:59:27 · 367 阅读 · 0 评论 -
leetcode题目 130. 被围绕的区域
题目给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例输入:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充...原创 2020-02-16 12:49:39 · 500 阅读 · 0 评论 -
leetcode题目 78. 子集&&90. 子集 II
题目(78. 子集)给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]思路进行递归回溯,对每个元素我们有两种选择,要或者不要,选择了之后进入下一个递归。代码public cla...原创 2020-02-15 16:04:55 · 100 阅读 · 0 评论 -
leetcode题目 12. 整数转罗马数字&&13. 罗马数字转整数
题目(12. 整数转罗马数字)罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 ...原创 2020-02-14 14:19:31 · 170 阅读 · 0 评论 -
leetcode题目 238. 除自身以外数组的乘积
题目给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不...原创 2020-02-13 13:03:12 · 118 阅读 · 0 评论 -
leetcode题目 200. 岛屿数量
题目给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3解析大致就是一个dfs的过程,首先遍历一次地...原创 2020-02-12 22:08:00 · 287 阅读 · 0 评论 -
leetcode题目 152. 乘积最大子序列
题目给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。解析动态规划,题目给出一个数组求最大连乘和,但数组的负数是个问题,所以我们决定维...原创 2020-02-12 09:55:47 · 227 阅读 · 0 评论 -
leetcode题目 172. 阶乘后的零
题目给定一个整数 n,返回 n! 结果尾数中零的数量。示例示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.思路题目要求我们找出末尾0的个数,唯有10可以直接在末尾添0,而10=2*5,所以等价于找出阶乘因式分解中2与5的对数,2的个数远多于5(后面给出证明),所以又变换为找5的...原创 2020-02-11 15:27:42 · 120 阅读 · 0 评论 -
leetcode题目 91. 解码方法
题目一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。注意:可能存在不能解码的情况,如’00’示例示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: ...原创 2020-02-10 21:45:48 · 294 阅读 · 0 评论 -
leetcode题目 98. 验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:*节点的左子树只包含小于当前节点的数。*节点的右子树只包含大于当前节点的数。*所有左子树和右子树自身必须也是二叉搜索树。示例示例 1:输入: 2 / \1 3输出: true示例 2:输入:&...原创 2020-02-08 14:48:20 · 153 阅读 · 0 评论 -
leetcode题目 103. 二叉树的锯齿形层次遍历
题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如给定二叉树 [3,9,20,null,null,15,7], 3 / \9 20 / \&n...原创 2020-02-08 13:18:33 · 158 阅读 · 0 评论 -
leetcode题目 104. 二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 &nb...原创 2020-02-08 09:59:04 · 235 阅读 · 0 评论 -
leetcode题目 102. 二叉树的层次遍历
题目给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。示例给定二叉树: [3,9,20,null,null,15,7] 3 / \ 9 20 &nbs...原创 2020-02-07 20:51:43 · 193 阅读 · 0 评论 -
leetcode题目 49. 字母异位词分组
题目给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明所有输入均为小写字母。不考虑答案输出的顺序。思路思路很简单,遍历输入中的每个词,判断它...原创 2020-02-06 15:17:36 · 416 阅读 · 0 评论 -
leetcode题目 80. 删除排序数组中的重复项 II
题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长...原创 2020-02-04 15:20:43 · 179 阅读 · 0 评论 -
leetcode题目 45. 跳跃游戏 II
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。思路一 动规(菜鸡的思路)我们维护一个动规数组d...原创 2020-02-01 09:48:58 · 198 阅读 · 0 评论 -
leetcode题目 14. 最长公共前缀
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。我的思路很简单,选一个最短的字符串作为基准,然后依此与每个字符串比较,找出最长前缀,然后依此...原创 2020-01-31 11:13:39 · 199 阅读 · 0 评论 -
leetcode题目 415. 字符串相加
题目给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:1、num1 和num2 的长度都小于 5100.2、num1 和num2 都只包含数字 0-9.3、num1 和num2 都不包含任何前导零。4、你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。示例输入:“256”“232”输出:“488”解法我们直接模拟...原创 2020-01-28 20:28:47 · 157 阅读 · 0 评论 -
leetcode题目 43. 字符串相乘
题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。说明1、num1 和 num2 的长度小于110。2、num1 和 num2 只包含数字 0-9。3、num1 和 num2 均不以零开头,除非是数字 0 本身。4、不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。...原创 2020-01-29 10:50:54 · 280 阅读 · 0 评论 -
leetcode题目 41. 缺失的第一个正数
题目给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1思路一一共n个数,我们要找出未出现过的最小正整数。当这一堆数是1到n时,取得result的最大值n+1,如果有重复数字,那么这个n个数占不满1到n,比n大的数我们可...原创 2020-01-19 15:24:02 · 126 阅读 · 0 评论 -
leetcode题目 32. 最长有效括号
题目给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”(以下题解思路来自leetcode官方)思路一 使用栈首先将-1加入栈(-1用于计算字符串的长度,比如“(()))” )。我们...原创 2020-01-18 16:11:11 · 232 阅读 · 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]...原创 2020-01-17 17:13:55 · 555 阅读 · 0 评论 -
leetcode题目 25. K 个一组翻转链表
题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->...原创 2020-01-17 14:03:18 · 137 阅读 · 0 评论 -
leetcode题目 24. 两两交换链表中的节点
题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例给定 1->2->3->4, 你应该返回 2->1->4->3.思路这是个基本的链表题目,思路很好想,结果我写出来发现并不是那么回事。我采用三个节点pre、cur、next依此对链表进行处理,这里有个小技巧,我们new一个p...原创 2020-01-15 22:21:36 · 150 阅读 · 0 评论 -
leetcode题目 23. 合并K个排序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6大体思路使用分治的思想。首先看两个链表的合并,我们每次选择较小的头元素,直到选完为止。下一步:以下省略…两个链...原创 2020-01-15 14:42:35 · 105 阅读 · 0 评论 -
leetcode题目 22. 括号生成
题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。示例输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]大体思路图片来源于网络代码 public List<String> generateParenthesis(int n) { //结果集 ...原创 2020-01-14 18:44:44 · 124 阅读 · 0 评论