
Leetcode
Evildoer_llc
这个作者很懒,什么都没留下…
展开
-
Leetcode 128. 最长连续序列 DP
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为O(n)。示例:输入:[100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是[1, 2, 3, 4]。它的长度为 4。两种方法,一种map,一种set。map注意除重。class Solution {public: int longestConsecu...原创 2019-04-08 23:01:31 · 230 阅读 · 0 评论 -
leetcode 数组中的第K个最大元素 快排思想
在未排序的数组中找到第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说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。...原创 2019-03-17 23:53:52 · 297 阅读 · 0 评论 -
Leetcode 最小栈 栈的应用
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。 pop()-- 删除栈顶的元素。 top()-- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.pu...原创 2019-03-17 23:52:23 · 319 阅读 · 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(nlogn) ,n...原创 2019-03-20 22:38:15 · 196 阅读 · 0 评论 -
Leetcode 378. 有序矩阵中第K小的元素
给定一个n x n矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。说明:你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2。二分 O...原创 2019-03-20 22:37:04 · 155 阅读 · 0 评论 -
Leetcode 295. 数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。示例:a...原创 2019-03-20 22:34:00 · 183 阅读 · 0 评论 -
Leetcode 105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7递归求解/** * Definition for a bin...原创 2019-03-20 22:32:25 · 138 阅读 · 0 评论 -
Leetcode 106. 从中序与后序遍历序列构造二叉树 递归
根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7递归求解/** * Definition for a bi...原创 2019-03-20 22:31:17 · 159 阅读 · 0 评论 -
Leetcode 152. 乘积最大子序列 DP
给定一个整数数组nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出:6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。状态转移方程:maxm = max(maxm*nums[i],...原创 2019-03-11 23:59:38 · 192 阅读 · 0 评论 -
Leetcode 242 有效的字母异位词 思维
给定两个字符串s和t,编写一个函数来判断t是否是s的一个字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法...原创 2019-03-11 23:33:14 · 147 阅读 · 0 评论 -
Leetcode 140. 单词拆分 II map+DFS
给定一个非空字符串s和一个包含非空单词列表的字典wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDict =["cat", "cats", "and", "sand...原创 2019-03-11 23:10:08 · 252 阅读 · 0 评论 -
Leetcode 240. 搜索二维矩阵 II 思维
编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, ...原创 2019-03-06 22:42:20 · 260 阅读 · 0 评论 -
Leetcode 179. 最大数 思维
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入:[10,2]输出:210示例2:输入:[3,30,34,5,9]输出:9534330说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数。运用了C++11的一些特性函数to_string()将一个数字变成一个字符串。stoi(),将一个...原创 2019-03-24 22:29:24 · 216 阅读 · 0 评论 -
Leetcode 150. 逆波兰表达式求值 栈
根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9...原创 2019-03-24 22:31:05 · 219 阅读 · 0 评论 -
Leetcode 227. 基本计算器 II 栈
实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+,-,*,/四种运算符和空格。 整数除法仅保留整数部分。示例1:输入: "3+2*2"输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5用栈来处理优先级。加减号入栈,最后把栈内元素全部加起来clas...原创 2019-03-24 22:32:12 · 198 阅读 · 0 评论 -
Leetcode 300. 最长上升子序列 DP
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入:[10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是4说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为O(n2) 。进阶:你能将算法的时间复杂度降低到O(nlogn...原创 2019-04-08 23:00:16 · 229 阅读 · 0 评论 -
Leetcode 328. 奇偶链表 思维
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->...原创 2019-04-08 22:57:48 · 156 阅读 · 0 评论 -
Leetcode 141. 环形链表 思维
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos ...原创 2019-04-08 22:56:20 · 195 阅读 · 0 评论 -
Leetcode 124. 二叉树中的最大路径和 DP
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20...原创 2019-04-08 22:54:10 · 239 阅读 · 0 评论 -
Leetcode 237. 删除链表中的节点 思维
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9....原创 2019-04-02 22:08:31 · 179 阅读 · 0 评论 -
Leetcode 206. 反转链表 思维
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL两种方法,迭代法和递归法迭代法代码:/** * Definition for singly-linked list. * struct ListNode { * int val; *...原创 2019-04-02 22:06:59 · 167 阅读 · 0 评论 -
Leetcode 315. 计算右侧小于当前元素的个数 思维
给定一个整数数组nums,按要求返回一个新数组counts。数组counts有该性质:counts[i]的值是nums[i]右侧小于nums[i]的元素的数量。示例:输入: [5,2,6,1]输出:[2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的右侧仅有 1 个更小的元素 (1).6 的右侧有 1 个更小的元素...原创 2019-04-02 22:04:22 · 308 阅读 · 0 评论 -
Leetcode 324. 摆动排序 II
给定一个无序的数组nums,将它重新排列成nums[0] < nums[1] > nums[2] < nums[3]...的顺序。示例1:输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是[1, 4, 1, 5, 1, 6]示例 2:输入: nums = [1, 3, 2, 2, 3, 1]...原创 2019-03-24 22:38:13 · 329 阅读 · 0 评论 -
Leetcode 162. 寻找峰值 二分
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1] = nums[n] = -∞。示例 1:输入: nums =[1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返...原创 2019-03-24 22:36:32 · 222 阅读 · 0 评论 -
Leetcode 287. 寻找重复数 思维+二分
给定一个包含n+ 1 个整数的数组nums,其数字都在 1 到n之间(包括 1 和n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入:[1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。 只能使用额外的O(1) 的空间。...原创 2019-03-24 22:35:08 · 246 阅读 · 0 评论 -
Leetcode 172. 阶乘后的零 思维
给定一个整数n,返回n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释:3! = 6, 尾数中没有零。示例2:输入: 5输出: 1解释:5! = 120, 尾数中有 1 个零.说明:你算法的时间复杂度应为O(logn)。5!=120,只有阶乘含有5的因子才会出现0。所以判断有几个这个数有几阶乘为5的因子class Soluti...原创 2019-03-24 22:33:28 · 168 阅读 · 0 评论 -
Leetcode 238. 除自身以外数组的乘积 思维
给定长度为n的整数数组nums,其中n> 1,返回输出数组output,其中output[i]等于nums中除nums[i]之外其余各元素的乘积。示例:输入:[1,2,3,4]输出:[24,12,8,6]说明:请不要使用除法,且在O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间...原创 2019-03-14 00:48:30 · 183 阅读 · 0 评论 -
Leetcode 334. 递增的三元子序列 思维
给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的i, j, k,且满足0 ≤i<j<k≤n-1,使得arr[i]<arr[j]<arr[k],返回 true ;否则返回 false 。说明:要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输...原创 2019-03-14 00:46:52 · 165 阅读 · 0 评论 -
Leetcode 980. 不同路径 III DFS
在二维网格grid上,有 4 种类型的方格:1表示起始方格。且只有一个起始方格。 2表示结束方格,且只有一个结束方格。 0表示我们可以走过的空方格。 -1表示我们无法跨越的障碍。返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目,每一个无障碍方格都要通过一次。示例 1:输入:[[1,0,0,0],[0,0,0,0],[0,0,2...原创 2019-03-01 22:04:31 · 261 阅读 · 0 评论 -
Leetcode 887. 鸡蛋掉落 DP
你将获得K个鸡蛋,并可以使用一栋从1到N共有N层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层F,满足0 <= F <= N任何从高于F的楼层落下的鸡蛋都会碎,从F楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层X扔下(满足1 <= ...原创 2019-03-04 23:22:52 · 682 阅读 · 0 评论 -
Leetcode 23. 合并K个排序链表 分治
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6K个有序列表,采用分治方法,两两合并。时间复杂度是O(nlogK),如果链表数据全部输入到优先队列里,再弹...原创 2019-02-19 22:02:12 · 271 阅读 · 0 评论 -
Leetcode 37. 解数独 暴力
编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 '.' 表示。一个数独。答案被标成红色。Note:给定的数独序列只包含数字 1-9 和字符 '.' 。 你可以假设给定的数独只有唯一...原创 2019-02-24 20:31:10 · 571 阅读 · 0 评论 -
Leetcode 4. 寻找两个有序数组的中位数 思维
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则...原创 2019-02-19 00:21:59 · 417 阅读 · 0 评论 -
Leetcode 2. 两数相加 思维
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...原创 2019-02-19 00:17:05 · 619 阅读 · 0 评论 -
Leetcode 1. 两数之和 思维
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]暴力O(N...原创 2019-02-19 00:14:29 · 339 阅读 · 0 评论 -
Leetcode 7. 整数反转 思维
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。...原创 2019-02-27 23:33:15 · 229 阅读 · 0 评论 -
Leetcode 829. 连续整数求和 思维
给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N?示例 1:输入: 5输出: 2解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。示例 2:输入: 9输出: 3解释: 9 = 9 = 4 + 5 = 2 + 3 + 4示例 3:输入: 15输出: 4解释: 15 = 15 = 8 + 7 = 4 + ...原创 2019-02-27 23:27:16 · 483 阅读 · 0 评论 -
Leetocde 32. 最长有效括号 栈
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为"()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为"()()"用栈来做。DP做法可能以后更新。先附上栈的做法。创立一个栈,遍历字符串,左括号入栈,遇到右括号,如果...原创 2019-02-22 23:03:04 · 536 阅读 · 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),所以不能用...原创 2019-02-21 22:38:22 · 254 阅读 · 0 评论 -
Leetcode 208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("ap...原创 2019-03-01 23:06:47 · 172 阅读 · 0 评论