每天进步一点点之LeetCode
为博主自己今后找工作提前做好准备,预计半年内刷完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 · 204 阅读 · 0 评论 -
(LeetCode 003)无重复字符的最长子串 [滑动窗口(队列) + HashMap]
问题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路:这道题主要用到思路是:滑动窗口 什么是滑动窗口?其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!如何移动?我们对于上述情况只要把队列的左边的元素移出就行了,对于一般情况,原创 2020-09-29 10:39:59 · 222 阅读 · 0 评论 -
(LeetCode 002) 两数相加 [链表模拟两数相加]
2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://原创 2020-09-24 12:54:24 · 189 阅读 · 0 评论 -
(LeetCode 001)两数之和 [HashMap查询O(1)]
1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum暴力原创 2020-09-24 11:31:37 · 265 阅读 · 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 · 240 阅读 · 0 评论 -
(LeetCode 309)最佳买卖股票时机含冷冻期 [dp + 逆向思维]
309. 最佳买卖股票时机含冷冻期给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的...原创 2019-01-18 01:30:13 · 354 阅读 · 0 评论 -
(LeetCode 213)打家劫舍 II [DP + 分类讨论]
213. 打家劫舍 II你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]...原创 2019-01-18 00:12:05 · 220 阅读 · 0 评论 -
(LeetCode 502)IPO [优先队列 +仔细读题充分利用题目信息]
502. IPO假设 LeetCode 即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,LeetCode希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 LeetCode 设计完成最多 k 个不同项目后得到最大总资本的方式。给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相...原创 2019-01-13 15:08:24 · 222 阅读 · 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 · 1529 阅读 · 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 · 1419 阅读 · 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 · 317 阅读 · 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 · 1220 阅读 · 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 · 666 阅读 · 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 · 272 阅读 · 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 · 1043 阅读 · 0 评论 -
(LeetCode 546)移除盒子 [DP经典难题 + DFS]
546. 移除盒子给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k*k 个积分。当你将所有盒子都去掉之后,求你能获得的最大积分和。示例 1:输入:[1, 3, 2, 2, 2, 3, 4, 3, 1]输出:2...原创 2018-12-19 19:43:50 · 3411 阅读 · 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 · 213 阅读 · 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 · 757 阅读 · 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 · 228 阅读 · 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 · 394 阅读 · 0 评论 -
(LeetCode 515)在每个树行中找最大值 [简单DFS]
515. 在每个树行中找最大值您需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9]分析:在进行dfs遍历的时候,记录当前节点所在的深度,相同深度中保留最大值即可。AC代码:/** * Definition...原创 2018-11-13 23:04:46 · 243 阅读 · 0 评论 -
(LeetCode 129)求根到叶子节点数字之和 [简单DFS ]
129. 求根到叶子节点数字之和给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点...原创 2018-11-13 22:34:26 · 361 阅读 · 0 评论 -
(LeetCode 337)打家劫舍 III [深度优先搜索 + 相邻关系不兼容问题]
337. 打家劫舍 III在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1...原创 2018-11-13 16:51:22 · 304 阅读 · 0 评论 -
(LeetCode 216)组合总和 III [DFS:简单入门 + 去重]
216. 组合总和 III找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]分析:此题是...原创 2018-11-02 20:02:26 · 264 阅读 · 0 评论 -
(LeetCode 40) 组合总和 II [DFS: 去重]
40. 组合总和 II给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,...原创 2018-11-02 19:33:23 · 502 阅读 · 0 评论 -
(LeetCode 39)组合总和 [DFS: 暴力搜索 + 剪枝 + 去重]
39. 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解...原创 2018-11-01 21:48:34 · 765 阅读 · 0 评论 -
(LeetCode 17)电话号码的字母组合 [DFS入门题:暴力枚举所有情况]
17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。分析:暴力...原创 2018-11-01 20:43:10 · 552 阅读 · 0 评论 -
(LeetCode 22)括号生成 [ 思路详解+ DFS : 暴力 + 剪枝]
22. 括号生成给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]分析:我们可以将题目转化为:有一个2*n长度的数组,每一个位置你可以放’(’ 或者 ‘)’。让你输出其中满足以下两个条件的所有结果:1:’...原创 2018-10-31 21:41:26 · 867 阅读 · 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 · 449 阅读 · 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 · 4971 阅读 · 0 评论 -
(LeetCode 42)接雨水 [思维题]
42.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6分析: (我们...原创 2018-09-09 23:47:09 · 946 阅读 · 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 · 226 阅读 · 0 评论 -
(LeetCode 198)打家劫舍 [简单dp]
198.打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1: 输入: [1,2,3,1] 输出: 4 解释: 偷窃 1 号房屋 (金额...原创 2018-09-16 10:40:08 · 218 阅读 · 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 · 177 阅读 · 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 < x &l...原创 2018-10-08 00:01:20 · 598 阅读 · 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 · 1208 阅读 · 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 · 762 阅读 · 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 · 243 阅读 · 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 · 204 阅读 · 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 · 969 阅读 · 0 评论