
LeetCode
Pegasi_Tio
蒟蒻,学习算法中,记录有特点的题
展开
-
[几何] LeetCode 892. 三维形体的表面积
[几何] LeetCode 892. 三维形体的表面积在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。请你返回最终形体的表面积。示例 1:输入:[[2]]输出:10示例 2:输入:[[1,2],[3,4]]输出:34示例 3:输入:[[1,0],[0,2]]...原创 2020-03-25 11:59:44 · 264 阅读 · 0 评论 -
[动态规划] LeetCode 面试题 17.16. 按摩师
[动态规划] LeetCode 面试题 17.16. 按摩师一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。**注意:**本题相对原题稍作改动示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预...原创 2020-03-24 09:59:27 · 303 阅读 · 0 评论 -
[dfs] [数学] LeetCode 365. 水壶问题
[dfs] [数学] LeetCode 365. 水壶问题有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous “Die Ha...原创 2020-03-21 17:46:38 · 527 阅读 · 0 评论 -
[优先队列][quick select] LeetCode 面试题40. 最小的k个数
[优先队列][quick select] LeetCode 面试题40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]...原创 2020-03-20 17:30:36 · 282 阅读 · 0 评论 -
[链表] LeetCode 19. 删除链表的倒数第N个节点
[链表] LeetCode 19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?这里是简单版,只用...原创 2020-03-19 21:46:12 · 178 阅读 · 0 评论 -
[链表] LeetCode 2. 两数相加
[链表] LeetCode 2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> ...原创 2020-03-19 20:31:52 · 160 阅读 · 0 评论 -
LeetCode 409. 最长回文串
LeetCode 409. 最长回文串给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:"abccccdd"输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。统计出现的次数,如果是偶...原创 2020-03-19 10:32:30 · 176 阅读 · 0 评论 -
[链表] LeetCode 面试题22. 链表中倒数第k个节点
[链表] LeetCode 面试题22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返...原创 2020-03-18 23:02:40 · 330 阅读 · 0 评论 -
[链表] LeetCode 237. 删除链表中的节点
[链表] LeetCode 237. 删除链表中的节点请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 ...原创 2020-03-18 21:28:37 · 183 阅读 · 0 评论 -
[链表] LeetCode 234. 回文链表
[链表] LeetCode 234. 回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?刚写完反转链表和求链表中点的好处首先求链表的中点slow,然后反转从slow开始的后半部分的链表再从头比...原创 2020-03-18 20:34:48 · 200 阅读 · 0 评论 -
[链表] LeetCode 876. 链表的中间结点
[链表] LeetCode 876. 链表的中间结点给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,...原创 2020-03-18 19:16:12 · 178 阅读 · 0 评论 -
[链表] LeetCode 203. 移除链表元素
[链表] LeetCode 203. 移除链表元素难度简单356删除链表中等于给定值 *val* 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5增加一个头节点,判断下一个的值是不是等于val,如果相等就把当前结点的下一个设置成下一个的下一个,不相等再后移防...原创 2020-03-18 18:00:47 · 150 阅读 · 0 评论 -
[链表] LeetCode 160. 相交链表
[链表] LeetCode 160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表**:**在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with va...原创 2020-03-18 17:46:18 · 185 阅读 · 0 评论 -
[链表] LeetCode 141. 环形链表
[链表] LeetCode 141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head =...原创 2020-03-18 17:45:49 · 143 阅读 · 0 评论 -
[链表] LeetCode 206. 反转链表
[链表] LeetCode 206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?普通的解法就是头插法class Solution {public: ListNode* r...原创 2020-03-18 12:00:56 · 172 阅读 · 0 评论 -
[链表] LeetCode 82. 删除排序链表中的重复元素 II
[链表] LeetCode 82. 删除排序链表中的重复元素 II给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3首先增加一个...原创 2020-03-18 10:22:48 · 182 阅读 · 0 评论 -
[几何?] LeetCode 836. 矩形重叠
[几何?] LeetCode 836. 矩形重叠矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形,判断它们是否重叠并返回结果。示例 1:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3...原创 2020-03-18 09:51:19 · 258 阅读 · 1 评论 -
[链表] LeetCode 83. 删除排序链表中的重复元素
[链表] LeetCode 83. 删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3碰到一样的就while直到不等,这样做会多一个保存当前位置的结点class Soluti...原创 2020-03-17 18:30:42 · 191 阅读 · 0 评论 -
[链表] LeetCode 21. 合并两个有序链表
[链表] LeetCode 21. 合并两个有序链表将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4尾插法class Solution {public: ListNode* mergeTwoLis...原创 2020-03-17 18:03:22 · 153 阅读 · 0 评论 -
LeetCode 1160. 拼写单词
LeetCode 1160. 拼写单词给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。示例 1:输入:words...原创 2020-03-17 16:51:45 · 224 阅读 · 0 评论 -
[动态规划]LeetCode 面试题 08.01. 三步问题
[动态规划]LeetCode 面试题 08.01. 三步问题三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1: 输入:n = 3 输出:4 说明: 有四种走法示例2: 输入:n = 5 输出:13提示:n范围在[1, 1000000]之间...原创 2020-03-14 20:10:10 · 338 阅读 · 0 评论 -
[二分 动态规划] LeetCode 392. 判断子序列
二分 动态规划 LeetCode 392. 判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的...原创 2020-03-14 19:46:39 · 280 阅读 · 0 评论 -
[单调队列]LeetCode 239. 滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值-----------...原创 2020-03-10 11:08:45 · 169 阅读 · 0 评论 -
LeetCode 20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false括号匹配,用栈,有...原创 2020-03-09 15:11:20 · 165 阅读 · 0 评论 -
LeetCode 13. 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。1...原创 2020-03-09 13:39:24 · 166 阅读 · 0 评论 -
LeetCode 575.分糖果
LeetCode 575.分糖果长度为偶数用set记录种类,取种类和糖果总数一半的最小值class Solution {public: int distributeCandies(vector<int>& candies) { set<int> s; for(auto num:candies) ...原创 2019-03-07 21:09:47 · 257 阅读 · 2 评论 -
LeetCode 503.下一个更大元素II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数; 第二个 1...原创 2019-04-18 21:23:11 · 354 阅读 · 0 评论 -
LeetCode 844.比较含退格的字符串
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。示例 1:输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = "a##c",...原创 2019-04-18 20:31:47 · 149 阅读 · 0 评论 -
LeetCode 682.棒球比赛
你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数。2. "+"(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。3. "D"(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。4. "C"(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除...原创 2019-04-18 20:16:00 · 168 阅读 · 0 评论 -
LeetCode 第133场周赛
1029. 两地调度公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]。返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达**。**示例:输入:[[10,20],[30,200],[400,50],[30,20]]输出:110解释:第一个人去 A 市,费用为 10。第二个人去 A 市,费用为 ...原创 2019-04-22 17:54:32 · 213 阅读 · 0 评论 -
LeetCode 84.柱状图中的最大矩形/POJ 2559
DescriptionA histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on the...原创 2019-04-17 20:48:34 · 444 阅读 · 0 评论 -
LeetCode 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单调栈当前柱子比栈顶高时,判断是否可以...原创 2019-04-22 16:29:15 · 161 阅读 · 0 评论 -
LeetCode 752.打开转盘锁-重写
你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为 '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数...原创 2019-04-14 21:00:39 · 222 阅读 · 0 评论 -
LeetCode 第132场周赛
第一次做,很菜,只记录了会的5024. 除数博弈爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否...原创 2019-04-14 20:09:42 · 178 阅读 · 0 评论 -
LeetCode 128.最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。既然连续,那么碰到一个数,检查数组中有没有其加一减一,如果有那么加上他们的连续长度,然后把连续长的端点赋值为新长度,具体实现见代码unordered__map查找O...原创 2019-04-14 19:13:53 · 141 阅读 · 0 评论 -
LeetCode 897.递增顺序查找树
给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :输入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9输出:[1,nul...原创 2019-04-26 11:25:23 · 375 阅读 · 0 评论 -
LeetCode 933. 最近的请求次数
写一个 RecentCounter 类来计算最近的请求。它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。返回从 3000 毫秒前到现在的 ping 数。任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。保证每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:inputs = ...原创 2019-04-19 19:26:59 · 179 阅读 · 0 评论 -
LeetCode 349.两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。mark一下构造函数的用法class Soluti...原创 2019-04-19 20:10:11 · 184 阅读 · 0 评论 -
LeetCode 721.账户合并
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该帐户的邮箱地址。现在,我们想合并这些帐户。如果两个帐户都有一些共同的邮件地址,则两个帐户必定属于同一个人。请注意,即使两个帐户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有...原创 2019-05-07 19:35:54 · 491 阅读 · 0 评论 -
LeetCode 684.冗余连接
在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的树...原创 2019-05-07 16:35:43 · 248 阅读 · 0 评论