
LeetCode
zpznba
日日行,不怕千万里。常常做,不怕千万事。
展开
-
541. 反转字符串 II
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"要求:该字符串只包含小写的英文字母。 给定字符串的长度和 k...原创 2019-05-11 17:01:35 · 195 阅读 · 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'都...原创 2019-03-02 12:51:17 · 146 阅读 · 0 评论 -
Leetcode 559. N叉树的最大深度(DFS和BFS解法)
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个3叉树:返回其最大深度,3。说明:树的深度不会超过1000。 树的节点总不会超过5000。【DFS解法】/*// Definition for a Node.class Node {public: int val; vecto...原创 2019-03-02 10:57:07 · 271 阅读 · 0 评论 -
LeetCode 121 买入和售出股票最大的收益
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2019-02-12 14:53:56 · 420 阅读 · 0 评论 -
Leetcode 540 有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 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)空间复杂度中运行。【思路】这道题给我们了一个有序数组,说是所有的元素都出现了两...原创 2019-02-22 22:24:05 · 381 阅读 · 0 评论 -
leetcode 53 最大子序列
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。【思路】求数组中最大子序列的和,可以遍历每一个数组元素,...原创 2019-02-11 21:44:15 · 242 阅读 · 0 评论 -
Leetcode 744 寻找比目标字母大的最小字母
给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。数组里字母的顺序是循环的。举个例子,如果目标字母target = 'z' 并且有序数组为 letters = ['a', 'b'],则答案返回 'a'。示例:输入:letters = ["c", "f", "j"]target = "a"输出: "c"输入:...原创 2019-02-16 21:31:56 · 151 阅读 · 0 评论 -
LeetCode 69 求x的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。【思路】二分查找的经典题目。这道题可以把x看做是目...原创 2019-02-16 21:10:45 · 257 阅读 · 0 评论 -
二分查找(C++)
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在LeetCode中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目标有很多种,而且在细节写法也有一些变化。根据查找的目标不同,二分查找法主要分为以下三类:第一类: 需查找和目标值完全相等的数这是最简单的一类,也是我们最开始学二分查找法需要解决的问题,比如我们...原创 2019-02-16 21:07:50 · 6668 阅读 · 1 评论 -
Leetcode 605. 种花问题
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出...原创 2019-02-07 22:49:11 · 226 阅读 · 0 评论 -
Leetcode 406. 根据身高重建队列
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,...原创 2019-02-04 19:50:16 · 600 阅读 · 0 评论 -
leetcode 452 最少数量的箭引爆气球
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xen...原创 2019-02-03 16:01:59 · 272 阅读 · 0 评论 -
leetcode 435 无重叠区间
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,...原创 2019-02-02 23:16:00 · 195 阅读 · 0 评论 -
Leetcode 75 荷兰国旗问题
给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。...原创 2019-01-31 20:56:06 · 266 阅读 · 0 评论 -
leetcode 215 数组中的第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 ≤ 数组的长度。【解法一】时间复杂度 O...原创 2019-01-16 11:05:04 · 144 阅读 · 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(n log n) , n...原创 2019-01-19 12:03:50 · 242 阅读 · 0 评论 -
leetcode 524. 通过删除字母匹配到字典里最长单词
给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。示例 1:输入:s = "abpcplea", d = ["ale","apple","monkey","plea"]输出: "apple"示例 2:输入:s = &原创 2019-01-13 16:25:21 · 250 阅读 · 0 评论 -
leetcode74. 搜索二维矩阵
编写一个高效的算法来判断mxn矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。示例1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例2:...原创 2019-03-10 15:43:16 · 129 阅读 · 0 评论 -
LeetCode 581 需要排序的最短子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 :输入的数组长度范围在[1, 10,000]。...原创 2019-03-11 09:55:06 · 385 阅读 · 0 评论 -
leetcode 3 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最...原创 2019-03-12 11:08:13 · 132 阅读 · 0 评论 -
LeetCode 260 只出现一次的数字 III(超级清晰的解释)
给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。示例 :输入: [1,2,1,3,2,5]输出: [3,5]注意:结果输出的顺序并不重要,对于上面的例子,[5, 3]也是正确答案。 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?【思路】左神这道题讲的十分清晰:【代码】cl...原创 2019-04-14 20:49:48 · 165 阅读 · 0 评论 -
Leetcode 198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃...原创 2019-04-12 15:02:49 · 114 阅读 · 0 评论 -
leetcode 142. 环形链表 II(寻找链表环的入口)
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index ...原创 2019-04-02 21:36:31 · 231 阅读 · 0 评论 -
leetcode 784 字母大小写全排列
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入: S = "a1b2"输出: ["a1b2", "a1B2", "A1b2", "A1B2"]输入: S = "3z4"输出: ["3z4", "3Z4"]输入: S = "12345"输出: ["12345"]注意:S的长度不超过12。...原创 2019-04-02 13:16:46 · 279 阅读 · 0 评论 -
LeetCode 673. 最长递增子序列的个数
给定一个未排序的整数数组,找到最长递增子序列的个数。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。注意:给定的数组长度不超过 2000 并且...原创 2019-04-11 11:07:45 · 651 阅读 · 0 评论 -
leetcode 674. 最长连续递增序列
给定一个未经排序的整数数组,找到最长且连续的的递增序列。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。 示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1。注意:数...原创 2019-04-11 10:15:06 · 241 阅读 · 0 评论 -
LeetCode 39 组合总和
给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。 解集不能包含重复的组合。示例1:输入: candidates = [2,3,6,7], target = 7,所求解集为...原创 2019-04-07 10:39:49 · 114 阅读 · 0 评论 -
leetcode 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说明:-100.0 <x< 1...原创 2019-04-06 12:29:51 · 106 阅读 · 0 评论 -
leetcode 78 子集
给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]【分析】 这道题还是用回溯的思想,参考leetcode 77 组合的那道题的思路。注意,从...原创 2019-03-31 22:26:26 · 208 阅读 · 0 评论 -
leetcode 77 组合
给定两个整数n和k,返回 1 ...n中所有可能的k个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]【分析】全排列,部分排列这些问题都是回溯的题目。只不过有些题目的解空间需要判断,有些的不需要。这道题的解空间是当长度等于k的大小时就是一个解,可以...原创 2019-03-31 21:51:17 · 127 阅读 · 0 评论 -
leetcode 174:地下城游戏
【分析】这道题一看就是动态规划,最开始从左上角往右下走,每次判断右侧和下侧哪个数大就走哪个方向,但是这样想的话就会有一个问题,就是我们需要判断每次到达一个房间后,我们的血量不能是负数。而问题的关键是骑士的初始值是未知量!!比如上面这个例子,如果按照这个策略最后得到的就是28,不是7。因此我们换个角度,从下往上倒退。状态定义:f(x, y) -------- 到达坐标(x, y)前骑士所...原创 2019-04-10 11:20:30 · 475 阅读 · 0 评论 -
leetcode 51 N皇后
n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n皇后问题的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。示例:输入: 4输出: [ [".Q..", // 解法 1 "...Q...原创 2019-03-31 16:51:58 · 89 阅读 · 0 评论 -
LeetCode 237
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9....原创 2019-03-24 09:55:51 · 456 阅读 · 0 评论 -
leetcode 234. 回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true【解法一】时间复杂度O(n),空间复杂度O(n),用一个栈:class Solution {public: bool isPalindrome(ListNode* head) { List...原创 2019-03-30 16:27:21 · 94 阅读 · 0 评论 -
leetcode 501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树例如:给定 BST[1,null,2,2], 1 \ 2 / 2返回[2].提示:如果众数超过...原创 2019-03-19 11:34:46 · 144 阅读 · 0 评论 -
leetcode 767. 重构字符串
给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例1:输入: S = "aab"输出: "aba"示例 2:输入: S = "aaab"输出: ""【思路】这道题给了我们一个字符串,让我们重构这个字符串,使得相同的字符不会相邻,如果无法做到,那么就返回空串,题目中的例子很好的说明了...原创 2019-03-18 15:47:13 · 435 阅读 · 0 评论 -
leetcode 283 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入:[0,1,0,3,12]输出:[1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。【思路】这道题题目默认让你移动零,所以可以用两个指针进行交换,找到一个零和它后面的一个非零,交换即可。【代码】class Solutio...原创 2019-01-12 10:33:41 · 177 阅读 · 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-01-11 21:02:16 · 124 阅读 · 2 评论 -
Leetcode 530. 二叉搜索树的最小绝对差
给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。示例 :输入: 1 \ 3 / 2输出:1解释:最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。注意: 树中至少有2个节点。 【解题思路】注意题目是二叉搜索树,那么一定不能忘记它的重要特性:中序遍历后得到一个升序数组!!!...原创 2018-12-18 17:25:25 · 290 阅读 · 0 评论 -
LeetCode387—字符串中第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2. 注意事项:您可以假定该字符串只包含小写字母。【思路】分两步:1.字频统计 2.出第一个出现次数为1的字符【C++用map】:class Solution {public:...原创 2018-11-13 22:34:18 · 135 阅读 · 0 评论