
LeetCode
文章平均质量分 60
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 · 594 阅读 · 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 · 1853 阅读 · 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 · 2979 阅读 · 0 评论 -
278.第一个错误的版本(First Bad Version)
题目描述你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出...原创 2018-06-03 22:00:04 · 3060 阅读 · 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 · 3407 阅读 · 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 · 3206 阅读 · 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 · 3414 阅读 · 0 评论 -
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 · 1225 阅读 · 1 评论 -
22.括号生成(Generate Parentheses)
问题描述给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]解题思路分析 public List<String> generateParenthesis(int n) {原创 2018-04-13 20:36:55 · 1843 阅读 · 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 · 1758 阅读 · 0 评论 -
20.有效的括号(Valid Parentheses)
题目描述给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。如果括号以正确的顺序闭合,则称字符串是有效的。例如,"()","{[]}"和 "()[]{}" 是有效的,但是 "(]" 和 "([)]" 不是。解题思路分析public boolean isValid(String s) { Stack<Character> s原创 2018-04-13 14:06:00 · 1262 阅读 · 0 评论 -
19.删除链表的倒数第N个节点(Remove Nth Node From End of List)
题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?解题思路方法一:双程 删除倒数第n个节点,也就是删除这个链表的第(L-n+1...原创 2018-04-13 13:40:03 · 1168 阅读 · 0 评论 -
18.四数相加(4Sum)
题目描述给定一个含有 n 个整数的数组 S,数列 S 中是否存在元素 a,b,c 和 d 使 a + b + c + d = target ?请在数组中找出所有满足各元素相加等于特定值的 不重复 组合。注意:解决方案集不能包含重复的四元组合。例如,给定数组 S = [1, 0, -1, 0, -2, 2],并且给定 target = 0。示例答案为:[ [-1, 0, 0, 1], ...原创 2018-04-12 20:13:04 · 1186 阅读 · 0 评论 -
17.电话号码的字母组合(Letter Combinations of a Phone Number)
题目描述给定一个数字字符串,返回数字所有可能表示的字母组合。下面给出数字到字母的映射(和电话号码一样)。输入:数字字符串 "23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].解题思路分析public List<String&原创 2018-04-12 20:06:38 · 1959 阅读 · 0 评论 -
455.分发饼干(Assign Cookies)
题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个...原创 2018-06-04 20:24:26 · 3215 阅读 · 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 · 3514 阅读 · 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 · 2921 阅读 · 0 评论 -
24.两两交换链表中的节点(Swap Nodes in Pairs)
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题思路 从链表首部开始,两两交换,利用递归;public class Solution024 { pri...原创 2018-06-01 22:27:14 · 2868 阅读 · 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 · 2850 阅读 · 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 · 3354 阅读 · 0 评论 -
680.验证回文字符串 Ⅱ(Valid Palindrome II)
题目描述给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。解题思路...原创 2018-06-06 21:48:17 · 3536 阅读 · 0 评论 -
98.验证二叉搜索树(Validate Binary Search Tree)
题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释...原创 2018-05-30 22:00:15 · 1246 阅读 · 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 · 3202 阅读 · 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 · 3349 阅读 · 0 评论 -
155.最小栈(Min Stack)
题目描述解题思路原创 2018-06-11 22:36:10 · 1249 阅读 · 1 评论 -
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 · 1379 阅读 · 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 · 1033 阅读 · 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 · 2992 阅读 · 0 评论 -
16.最接近的三数之和(3Sum Closest)
题目描述 给定一个包括 n 个整数的数组 S,找出 S 中的三个整数使得他们的和与给定的数 target 最接近。返回这三个数的和。 假定每组输入只存在一个答案。例如,给定数组 S = {-1 2 1 -4}, 并且 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).解题思路1.检查数组的大小是否符合我们的要求;2.对数组...原创 2018-04-12 18:29:14 · 1262 阅读 · 0 评论 -
15.三数之和(3Sum)
问题描述给定一个包含 n 个整数的数组 S,是否存在属于 S 的三个元素 a,b,c 使得 a + b + c = 0 ?找出所有不重复的三个元素组合使三个数的和为零。注意:结果不能包括重复的三个数的组合。例如, 给定数组 S = [-1, 0, 1, 2, -1, -4],一个结果集合为:[ [-1, 0, 1], [-1, -1, 2]]解题思路public List<L...原创 2018-04-12 14:04:19 · 1163 阅读 · 0 评论 -
14.最长公共前缀(Longest Common Prefix)
题目描述编写一个函数来查找字符串数组中最长的公共前缀字符串。解题思路分析1.检查字符串数组是否为空,或者数组长度是否为0;如果是,就返回"";2.创建字符串pre = strs[0],先假定它为该字符串数组的最长公共前缀;3.变量字符串数组的每个字符串;对于每个字符串,检查pre是否是它的前缀(从0开始); 如果是,就遍历下一个字符串; 如果不是,就让pre的长度减1;public St...原创 2018-04-12 12:35:14 · 1261 阅读 · 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 · 901 阅读 · 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 · 2077 阅读 · 0 评论 -
11.盛最多水的容器(Container With Most Water)
题目描述 给定n个正整数 a1,a2,...,an,其中每个整数用坐标(i,ai)表示。连接点(i,ai)和(i,0)画出直线i,总共有n条线。请找出其中两条直线,使得它们与x轴形成的容器能够装的水最多。注意:n>=2解题思路分析 1.定义两个指针,left和right,初始时,指向首部和尾部; 2.计算两个指针之间的面积area1 = min(height[le...原创 2018-04-01 20:14:16 · 4619 阅读 · 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 · 2933 阅读 · 0 评论 -
55.跳跃游戏(Jump Game)
题目描述给定一个非负整数数组,您最初位于数组的第一个索引处。数组中的每个元素表示您在该位置的最大跳跃长度。确定是否能够到达最后一个索引。示例:A = [2,3,1,1,4],返回 true。A = [3,2,1,0,4],返回 false。思路分析和解答...原创 2018-04-01 20:14:10 · 1213 阅读 · 0 评论 -
10.正则表达式匹配(Regular Expression Matching)
题目描述实现支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符。'*' 匹配零个或多个前面的元素。匹配应该覆盖整个输入字符串(不是部分字符串)。函数:bool isMatch(const char *s, const char *p)例子:isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("a...原创 2018-04-01 20:14:23 · 1052 阅读 · 0 评论 -
9.回文数(Palindrome Number)
题目描述判断一个整数是否是回文数。不能使用辅助空间(即要求空间复杂度为O(1))。负整数可以是回文数吗?(例如 -1,不可以,所有的负数都不是回文数)如果你打算把整数转为字符串,请注意不允许使用辅助空间的限制。你也可以考虑将数字颠倒。但是如果你已经解决了 “颠倒整数” 问题的话,就会注意到颠倒整数时可能会发生溢出。你怎么来解决这个问题呢?解题思路分析和实现方法方法一: 第一反应就是将整数...原创 2018-03-26 16:15:55 · 2675 阅读 · 1 评论 -
6.Z字形转换(ZigZag Conversion)
题目描述将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:(下面这样的形状)P A H NA P L S I I GY I R之后按逐行顺序依次排列:"PAHNAPLSIIGYIR"实现一个将字符串进行指定行数的转换的函数:string convert(string text, int nRows);convert("PAYPALISHIRING", 3...原创 2018-03-26 14:43:02 · 3981 阅读 · 0 评论 -
5. 最长回文子串(Longest Palindromic Substring)
题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 长度最长为1000。 回文串是指正读和反读都一样的字符串。解题思路及实现方法一:最长公共子串 反转S,变成T,S与T的最长公共子串Y就是最长回文子串。 当S="abacdfgdcaba"时,T="abacdgfdcaba",Y="abacd",很明显Y不是回文串。 ...原创 2018-03-26 09:51:29 · 5700 阅读 · 0 评论