LeetCode
STILLxjy
不要让任何人打乱你生活的节奏
展开
-
(LeetCode 069) x的平方根 【分析一道简单题,避免二分查找中死循环的写法】
题目:69. x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。来源:力扣(LeetCode)分析:题目很简单,很容易就想到使用二分查找。答案区间为 [left, right], 并且 mid = (left + right) >>>1更新条件为:if(mid * mid > x) right = mid - 1;else left = mid;上原创 2020-12-07 16:32:54 · 169 阅读 · 0 评论 -
(LeetCode 338)比特位计数 [分类讨论 + DP]
338. 比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]来源:力扣(LeetCode)分析:由二进制计数特点可知,一个二进制数 i 右移一位可以得到 i整除2 之后的值。例如 4/2=2,...原创 2019-10-23 11:15:37 · 199 阅读 · 0 评论 -
(LeetCode 740)删除与获得点数 [DP + 打家劫舍变形]
740. 删除与获得点数给定一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入: nums = [3, 4, 2]输出: 6解释:删除 4 来...原创 2019-01-19 22:48:03 · 282 阅读 · 0 评论 -
(LeetCode 502)IPO [优先队列 +仔细读题充分利用题目信息]
502. IPO假设 LeetCode 即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,LeetCode希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 LeetCode 设计完成最多 k 个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相...原创 2019-01-13 15:08:24 · 191 阅读 · 0 评论 -
(LeetCode 406)根据身高重建队列 [贪心+sort+条件推理 ]
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], [...原创 2019-01-13 13:11:33 · 1475 阅读 · 0 评论 -
(LeetCode 309)最佳买卖股票时机含冷冻期 [dp + 逆向思维]
309. 最佳买卖股票时机含冷冻期给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的...原创 2019-01-18 01:30:13 · 324 阅读 · 0 评论 -
(LeetCode 213)打家劫舍 II [DP + 分类讨论]
213. 打家劫舍 II你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]...原创 2019-01-18 00:12:05 · 193 阅读 · 0 评论 -
(LeetCode 886)可能的二分法 [01着色问题,dfs模拟]
886. 可能的二分法给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。当可以用这种方法将每个人分进两组时,返回 true;否则返回 false。示例 1:输入:N = 4, dislikes =...原创 2019-01-01 15:30:24 · 1180 阅读 · 0 评论 -
(LeetCode 934)最短的桥 [简单DFS + BFS]
934. 最短的桥在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。)现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。返回必须翻转的 0 的最小数目。(可以保证答案至少是 1。)示例 1:输入:[[0,1],[1,0]]输出:1示例 2:输入:[[0,1,0],[0,0,0],[0,0,1]]输出:2示例 3:输入:[[1,...原创 2018-12-29 17:06:20 · 614 阅读 · 0 评论 -
(LeetCode 329)矩阵中的最长递增路径 [简单DP & 公式:dp[x][y] = dp[xx][yy] + 1]
329. 矩阵中的最长递增路径给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums =[[9,9,4],[6,6,8],[2,1,1]]输出: 4解释: 最长递增路径为 [1, 2, 6, 9]。示例 2:输入: nums =[[3,4,5],...原创 2018-12-28 00:50:59 · 247 阅读 · 0 评论 -
(LeetCode 690)员工的重要性 [简单递归]
690. 员工的重要性给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体...原创 2018-12-16 00:46:39 · 185 阅读 · 0 评论 -
(LeetCode 279)完全平方数 [简单dp]
279. 完全平方数给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.分析:设dp[m]表示数字m需要的完全平方数的最小数目。那么对于数字nk...原创 2019-01-06 14:56:04 · 289 阅读 · 0 评论 -
(LeetCode 123)买卖股票的最佳时机 III [DP只能进行两次交易]
123. 买卖股票的最佳时机 III给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3...原创 2019-01-06 19:08:56 · 1382 阅读 · 0 评论 -
(LeetCode 152) 乘积最大子序列 [分类讨论 + 问题转换]
152. 乘积最大子序列给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。分析:设dp[i] 表示前i个数的最大乘积子序列的值。首先,可...原创 2019-01-19 13:54:03 · 275 阅读 · 0 评论 -
(LeetCode 343)正数拆分 [简单dp]
题目:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。分析:设dp[i]表示正数i拆分可以获得的最大值。数 i 可以被分为 j 和 i-j 两部分,并且都比 i 小。所以dp[i] 为这两部分的最大值的乘积。由于i 已经分为了两部分,所以对于 j 和 i-j 而言,它们有两种选择,以j 为例:1:不再拆分,值为他们本身 j。2...原创 2019-10-02 00:04:30 · 200 阅读 · 0 评论 -
(LeetCode 322) 零钱兑换 [简单dp]
题目:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1思路...原创 2019-10-01 23:38:19 · 198 阅读 · 0 评论 -
(LeetCode 221)最大正方形 [dp & 滚动数组]
题目:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4分析:方法一:找出最大正方形的面积,换句话说就是找出最大正方形的边长,面积为边长的平方。使用 dp[i][j] = k 表示在矩阵位置(i,j)处,以(i,j)为正方形的右下角的正方形的...原创 2019-10-01 12:15:38 · 182 阅读 · 0 评论 -
(LeetCode 96)不同的二叉搜索树 [dp & 卡特兰数的应用]
问题描述:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树 卡特兰数...原创 2019-09-18 12:57:37 · 231 阅读 · 0 评论 -
(LeetCode 983)最低票价 [简单DP + 可以浪费旅行天数]
983. 最低票价在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无...原创 2019-02-20 00:01:53 · 1491 阅读 · 0 评论 -
(LeetCode 947)移除最多的同行或同列石头 [并查集 + 求解连通分量的个数]
947. 移除最多的同行或同列石头在二维平面上,我们将石头放置在一些整数坐标点上。每个坐标点上最多只能有一块石头。现在,move 操作将会移除与网格上的某一块石头共享一列或一行的一块石头。我们最多能执行多少次 move 操作?示例 1:输入:stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]]输出:5示例 2:输入:stones = [[0,...原创 2019-02-27 20:19:27 · 603 阅读 · 0 评论 -
(LeetCode 743)网络延迟时间 [最短路 + bellman-ford]
743. 网络延迟时间有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。现在,我们向当前的节点 K 发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。注意:N 的范围在 [1, ...原创 2019-02-27 19:12:07 · 380 阅读 · 0 评论 -
(LeetCode 413)等差数列划分 [非DP O(n)算法 + DP算法 ]
413. 等差数列划分数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P], A[p + 1], …, A[Q - 1], A[Q] 是等差的。并且 P + 1 < Q 。函数要返回数组 A 中所有为等差数组的子数组个...原创 2019-02-22 00:48:52 · 273 阅读 · 0 评论 -
(LeetCode 494)目标和 [DFS + 分类讨论]
494. 目标和给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释:-1+1+1+1+1 = 3+1-1+1+1+1...原创 2018-12-16 11:44:53 · 735 阅读 · 0 评论 -
(LeetCode 841) 钥匙和房间 [简单DFS]
841. 钥匙和房间有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v...原创 2018-12-16 01:02:40 · 208 阅读 · 0 评论 -
(LeetCode 863) 二叉树中所有距离为 K 的结点 [DFS + 添加父节点信息]
863. 二叉树中所有距离为 K 的结点给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2输出:[7,4,1]注意,输入的 “r...原创 2018-12-27 15:18:36 · 978 阅读 · 0 评论 -
(LeetCode 72)编辑距离 [动态规划 + 字符串好题]
72. 编辑距离给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> r...转载 2018-10-21 21:45:14 · 210 阅读 · 0 评论 -
(LeetCode 376)摆动序列 [动态规划 O(n) 和 O(n^2) 解答 详细思路 ]
376. 摆动序列如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列...原创 2018-10-16 13:47:36 · 729 阅读 · 0 评论 -
(LeetCode 46 & 47)全排列 & 全排列 II [有重复数字,去重复(添加约束条件)]
46. 全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]分析:使用f[i]标记,记录第i个数字是否在排列中。每次按照索引的从小到大的顺序进行判断,若第i个数不在排列中,则添加到排列中,否则判断下一个数字。使用递归可以十分方便的...原创 2018-10-14 14:27:34 · 1177 阅读 · 0 评论 -
(LeetCode 50) Pow(x, n) [递归 & 非递归 & 对非指数的处理]
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/2)^2 = 1/4 = 0.25说明:-100.0 &lt; x &l...原创 2018-10-08 00:01:20 · 559 阅读 · 0 评论 -
(LeetCode 41)缺失的第一个正数 [交换 & 排序]
41. 缺失的第一个正数给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1: 输入: [1,2,0] 输出: 3示例 2: 输入: [3,4,-1,1] 输出: 2示例 3: 输入: [7,8,9,11,12] 输出: 1 说明:你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。分析: 题目的难点在于只能使用常数级别的空间。若题目...原创 2018-09-14 20:04:19 · 208 阅读 · 0 评论 -
(LeetCode 48)旋转图像 [分解为一个个子问题进行求解]
48.旋转图像给定一个 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-09-19 20:25:10 · 155 阅读 · 0 评论 -
(LeetCode 35 and 34)查找第一个大于(等于)target的位置 [二分查找解题思路模板]
35 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1: 输入: [1,3,5,6], 5 输出: 2示例 2: 输入: [1,3,5,6], 2 输出: 1示例 3: 输入: [1,3,5,6], 7 输出: 4示例 4: 输入: [1,3...原创 2018-09-07 13:18:06 · 4813 阅读 · 0 评论 -
(LeetCode 33)搜索旋转排序数组 [分段二分查找]
33 搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1: 输入: nums = [...原创 2018-09-07 11:42:11 · 424 阅读 · 0 评论 -
(LeetCode 198)打家劫舍 [简单dp]
198.打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1: 输入: [1,2,3,1] 输出: 4 解释: 偷窃 1 号房屋 (金额...原创 2018-09-16 10:40:08 · 194 阅读 · 0 评论 -
(LeetCode 22)括号生成 [ 思路详解+ DFS : 暴力 + 剪枝]
22. 括号生成给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]分析:我们可以将题目转化为:有一个2*n长度的数组,每一个位置你可以放’(’ 或者 ‘)’。让你输出其中满足以下两个条件的所有结果:1:’...原创 2018-10-31 21:41:26 · 832 阅读 · 0 评论 -
(LeetCode 90)子集 II [添加约束条件,去重复]
90. 子集 II给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]分析:使用for(int i=0;i<(1<<n);i++),枚举全部子集。 i的所有位由0,1组成,根据i在某一位 j 上是...原创 2018-10-25 00:01:04 · 185 阅读 · 0 评论 -
(LeetCode 73)矩阵置零 [图文详解 + 常数空间复杂度:转换思维,内部指定]
73. 矩阵置零给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[...原创 2018-10-27 10:49:29 · 892 阅读 · 0 评论 -
(LeetCode 546)移除盒子 [DP经典难题 + DFS]
546. 移除盒子给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k &gt;= 1),这样一轮之后你将得到 k*k 个积分。当你将所有盒子都去掉之后,求你能获得的最大积分和。示例 1:输入:[1, 3, 2, 2, 2, 3, 4, 3, 1]输出:2...原创 2018-12-19 19:43:50 · 3352 阅读 · 0 评论 -
(LeetCode 513) 找树左下角的值 [DFS + 找树左下角的值=叶子节点 + 最左(第一次出现) ]
513. 找树左下角的值给定一个二叉树,在树的最后一行找到最左边的值。示例 1:输入: 2 / \ 1 3输出:1示例 2:输入: 1 / \ 2 3 / / \ 4 5 6 / 7输出:7分析:题目求解问题树的最后一行找到最左边的值 等价...原创 2018-11-13 23:25:01 · 370 阅读 · 0 评论 -
(LeetCode 515)在每个树行中找最大值 [简单DFS]
515. 在每个树行中找最大值您需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9]分析:在进行dfs遍历的时候,记录当前节点所在的深度,相同深度中保留最大值即可。AC代码:/** * Definition...原创 2018-11-13 23:04:46 · 215 阅读 · 0 评论