LeetCode刷题指南
文章平均质量分 60
介绍LeetCode上算法题目的解题思路
Iovems
这个作者很懒,什么都没留下…
展开
-
111.二叉树的最小深度(Minimum Depth of Binary Tree)
题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.解题思路...原创 2018-06-19 22:29:04 · 557 阅读 · 0 评论 -
54.螺旋矩阵(Spiral Matrix)
问题描述给出一个 m x n 的矩阵(m 行, n 列),请按照顺时针螺旋顺序返回元素。例如,给出以下矩阵:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]应该返回 [1,2,3,6,9,8,7,4,5]解题思路和分析方法一:模拟直觉就是按照这个顺时针的顺序将数组中的数字输出。 矩阵有R行,C列,seen[r][c]数组用来标记是否被访问过。我们...原创 2018-03-27 18:31:13 · 1982 阅读 · 0 评论 -
55.跳跃游戏(Jump Game)
题目描述给定一个非负整数数组,您最初位于数组的第一个索引处。数组中的每个元素表示您在该位置的最大跳跃长度。确定是否能够到达最后一个索引。示例:A = [2,3,1,1,4],返回 true。A = [3,2,1,0,4],返回 false。思路分析和解答...原创 2018-04-01 20:14:10 · 1154 阅读 · 0 评论 -
101.对称二叉树(Symmetric Tree)
问题描述给定一个二叉树,检查它是否是它自己的镜像(即,围绕它的中心对称)。例如,这个二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是: 1 / \ 2 2 \ \ 3 3...原创 2018-04-01 20:13:57 · 989 阅读 · 0 评论 -
151. 翻转字符串里的单词(Reverse Words in a String)
题目描述给定一个字符串,翻转字符串中的每个单词。例如,给定 s = "the sky is blue",返回 "blue is sky the"。说明:什么构成一个词?连续的非空字符组成一个词。输入字符串是否可以包含前导或尾随空格?可以包含。但是,反转后的字符串不应包含前导或尾随空格。两个单词之间有多个空格怎么办?视为一个空格(这需要处理)解题思路解法一public String reverseW...原创 2018-04-02 19:20:55 · 2865 阅读 · 0 评论 -
152. 乘积最大子序列(Maximum Product Subarray)
题目描述找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。例如, 给定序列 [2,3,-2,4],其中乘积最大的子序列为 [2,3] 其乘积为 6。解题思路public int maxProduct(int[] A) { if (A == null || A.length == 0) { return 0; } //...原创 2018-04-02 21:05:14 · 881 阅读 · 0 评论 -
153.寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array)
题目描述假设一个按照升序排列的有序数组从某个未知的位置旋转。(比如 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2)。找到其中最小的元素。你可以假设数组中不存在重复的元素。解题思路 如果这个升序排序的有序数组确实按照某个未知的位置旋转,只有两种可能: 1.a [mid] > a [left] && a [mid]> a [ri...原创 2018-04-02 21:51:33 · 1213 阅读 · 0 评论 -
154.寻找旋转排序数组中的最小值2(Find Minimum in Rotated Sorted Array II)
题目描述这是问题 “在旋转排序阵列中查找最小值” 的进阶版:如果允许重复,该怎么办?这会影响时间复杂度吗?会如何影响和为什么?假设一个按照升序排列的有序数组从某未知的位置旋转。(比如 0 1 2 4 5 6 7 可能变成是 4 5 6 7 0 1 2)。找到其中最小的元素。数组中可能存在重复的元素。解题思路public int findMin(int[] nums) { int le...原创 2018-04-02 22:23:18 · 966 阅读 · 0 评论 -
155.最小栈(Min Stack)
问题描述设计一个支持 push,pop,top 操作,并能在常量时间内检索最小元素的栈。push(x) -- 将元素x推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack...原创 2018-04-02 22:41:30 · 1330 阅读 · 0 评论 -
51.N皇后(N-Queens)
题目描述 N皇后问题研究的是,如何将 n 个皇后放置在 n×n 的棋盘上,使得两两皇后之间不能相互攻击。 即任意两个皇后都不能处于同一行、同一列或同一斜线上 给定一个整数 n,返回 n 皇后问题的所有解法。 每一种解法包含了一个 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。 例如,4皇后问题有两种解法:...原创 2018-04-10 13:15:21 · 1115 阅读 · 0 评论 -
50.Pow(x, n)
题目描述实现 pow(x, n) ,即计算x的n次幂。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明: 1.-100.0 < x < 100.0; 2.n ...原创 2018-04-16 13:43:36 · 1202 阅读 · 0 评论 -
49.字母异位词分组(Group Anagrams)
题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。输入:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"],原创 2018-04-16 14:49:02 · 4953 阅读 · 0 评论 -
48.旋转图像(Rotate Image)
题目描述给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像;示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:...原创 2018-04-16 18:53:47 · 2057 阅读 · 0 评论 -
46.全排列(Permutations)
题目描述给定一个包含不同数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路 public List<List<Integer>> permute(int[] nums) { List&l...原创 2018-04-16 19:36:45 · 1373 阅读 · 0 评论 -
47.全排列 II(Permutations II)
题目描述给定一个可能包含重复数字的序列,返回所有不同的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]解题思路 public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> ...原创 2018-04-16 19:46:23 · 1328 阅读 · 0 评论 -
100.相同的树(Same Tree)
题目描述给定两个二叉树,写一个函数来检查它们是否相同。如果两棵树在结构上相同并且节点具有相同的值,则认为它们是相同的。示例 1:输入 : 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入 : 1 1 ...原创 2018-04-17 18:34:26 · 1212 阅读 · 0 评论 -
99.恢复二叉搜索树(Recover Binary Search Tree)
题目描述 二叉搜索树中的两个节点被错误地交换;请在不改变其结构的情况下,恢复这棵树; 示例 1:输入: [1,3,null,null,2] 1 / 3 \ 2输出: [3,1,null,null,2] 3 / 1 \ 2 示例 2:输入: [3,1,4,null,null,2] 3 / \1 4 ...原创 2018-05-28 22:38:10 · 1823 阅读 · 0 评论 -
98.验证二叉搜索树(Validate Binary Search Tree)
题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释...原创 2018-05-30 22:00:15 · 1211 阅读 · 0 评论 -
97.交错字符串(Interleaving String)
题目描述给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例 2:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false解题思路...原创 2018-05-31 21:15:02 · 2826 阅读 · 0 评论 -
24.两两交换链表中的节点(Swap Nodes in Pairs)
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题思路 从链表首部开始,两两交换,利用递归;public class Solution024 { pri...原创 2018-06-01 22:27:14 · 2851 阅读 · 0 评论 -
25.k个一组翻转链表(Reverse Nodes in k-Group)
题目描述给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->...原创 2018-06-01 22:44:15 · 2881 阅读 · 0 评论 -
69.Sqrt(x)(x的平方根)
题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。解题思路一个数 x 的开方 sqrt 一定在 0 ~ x 之间,并且满足 ...原创 2018-06-03 20:08:56 · 3381 阅读 · 0 评论 -
744.寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)
题目描述给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。数组里字母的顺序是循环的。举个例子,如果目标字母target = 'z' 并且有序数组为 letters = ['a', 'b'],则答案返回 'a'。示例:输入:letters = ["c", "f", "j"]target = "a"输出: "c"输入:le...原创 2018-06-03 20:23:13 · 3180 阅读 · 0 评论 -
540.有序数组中的单一元素(Single Element in a Sorted Array)
题目描述给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: [3,3,7,7,10,11,11]输出: 10注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行;解题思路令 key 为 Single Element 在数组中的位置。如果 m 为偶...原创 2018-06-03 20:41:13 · 3344 阅读 · 0 评论 -
278.第一个错误的版本(First Bad Version)
题目描述你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出...原创 2018-06-03 22:00:04 · 3032 阅读 · 0 评论 -
34.搜索范围(Search for a Range)
题目描述给定一个按照升序排列的整数数组 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], target...原创 2018-06-03 22:12:49 · 2950 阅读 · 0 评论 -
455.分发饼干(Assign Cookies)
题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个...原创 2018-06-04 20:24:26 · 3184 阅读 · 0 评论 -
665.非递减数列(Non-decreasing Array)
题目描述给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。示例 1:输入: [4,2,3]输出: True解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输...原创 2018-06-04 20:31:52 · 3445 阅读 · 0 评论 -
167. 两数之和 II -输入数组是有序的(Two Sum II - Input array is sorted)
题目描述给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target ...原创 2018-06-04 20:59:25 · 2945 阅读 · 0 评论 -
633.平方数之和(Sum of Square Numbers)
题目描述给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。示例1:输入: 5输出: True解释: 1 * 1 + 2 * 2 = 5示例2:输入: 3输出: False解题思路套路,双指针public boolean judgeSquareSum(int c) { int i = 0, j = (int) Math.sqrt(c);...原创 2018-06-05 22:35:31 · 3298 阅读 · 0 评论 -
345.反转字符串中的元音字母(Reverse Vowels of a String)
题目描述编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:给定 s = "hello", 返回 "holle".示例 2:给定 s = "leetcode", 返回 "leotcede".注意:元音字母不包括 "y".解题思路题目的意思是说,将字符串中的元音字母的顺序反转;使用双指针,指向待反转的两个元音字符,一个指针从头向尾遍历,一个指针从尾到头遍历;import java.u...原创 2018-06-06 08:52:13 · 3142 阅读 · 0 评论 -
680.验证回文字符串 Ⅱ(Valid Palindrome II)
题目描述给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。解题思路...原创 2018-06-06 21:48:17 · 3501 阅读 · 0 评论 -
215.数组中的第K个最大元素(Kth Largest Element in an Array)
题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4解题思路import java.util.Arrays;import java.util.PriorityQ...原创 2018-06-07 22:51:18 · 3316 阅读 · 0 评论 -
232.用栈实现队列(Implement Queue using Stacks)
题目描述使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue.pop(...原创 2018-06-11 22:07:25 · 978 阅读 · 0 评论 -
225.用队列实现栈(Implement Stack using Queues)
题目描述使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 dequ...原创 2018-06-11 22:23:34 · 1343 阅读 · 0 评论 -
155.最小栈(Min Stack)
题目描述解题思路原创 2018-06-11 22:36:10 · 1207 阅读 · 1 评论 -
23.合并K个有序链表(Merge k Sorted Lists)
问题描述合并k个有序链表,返回合并后的有序链表。尝试分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6解题思路分析 ...原创 2018-04-13 21:12:01 · 1194 阅读 · 1 评论 -
22.括号生成(Generate Parentheses)
问题描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]解题思路分析 public List<String> generateParenthesis(int n) {原创 2018-04-13 20:36:55 · 1818 阅读 · 0 评论 -
21.合并两个有序链表(Merge Two Sorted Lists)
问题描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路//递归地实现public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if ...原创 2018-04-13 18:59:44 · 1732 阅读 · 0 评论 -
20.有效的括号(Valid Parentheses)
题目描述给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。如果括号以正确的顺序闭合,则称字符串是有效的。例如,"()","{[]}"和 "()[]{}" 是有效的,但是 "(]" 和 "([)]" 不是。解题思路分析public boolean isValid(String s) { Stack<Character> s原创 2018-04-13 14:06:00 · 1229 阅读 · 0 评论