
LeetCode
Michael阿明
两个孩子的父亲,机械工程师,准备转行人工智能方向,一起加油吧!高举智慧,她就使你高升;怀抱智慧,她就使你尊荣。-- 箴言(4:8)
-
原创 LeetCode解题汇总目录
此篇为学习完《数据结构与算法之美》后,在LeetCode刷题的汇总目录,方便大家查找(Ctrl+Find),一起刷题,一起PK交流!另有解题:《剑指Offer》、《程序员面试金典》、LintCode代码能力测试CAT。如果本文对你有帮助,可以给我点赞加油!已解决 1771/1987 - 简单 531 中等 979 困难 2612019-09-06 13:43:5160837
361
-
原创 LeetCode 5692. 车队 II(单调栈)
文章目录1. 题目2. 解题1. 题目在一条单车道上有 n 辆车,它们朝着同样的方向行驶。给你一个长度为 n 的数组 cars ,其中 cars[i] = [positioni, speedi] ,它表示:positioni 是第 i 辆车和道路起点之间的距离(单位:米)。题目保证 positioni < positioni+1 。speedi 是第 i 辆车的初始速度(单位:米/秒)。简单起见,所有车子可以视为在数轴上移动的点。当两辆车占据同一个位置时,我们称它们相遇了。一旦两2021-02-28 16:31:1927
0
-
原创 LeetCode 5691. 通过最少操作次数使数组的和相等(贪心+双指针)
文章目录1. 题目2. 解题1. 题目给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。示例 1:输入:nums1 = [1,2,3,4,5,6], nums2 = [1,1,2,22021-02-28 16:24:5617
0
-
原创 LeetCode 5690. 最接近目标价格的甜点成本(DFS / 01背包)
文章目录1. 题目2. 解题1. 题目你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则:必须选择 一种 冰激凌基料。可以添加 一种或多种 配料,也可以不添加任何配料。每种类型的配料 最多两份 。给你以下三个输入:baseCosts ,一个长度为 n 的整数数组,其中每个 baseCosts[i] 表示第 i 种冰激凌基料的价格。toppingCosts,一个长度为 m 的整数数组,其中每个 toppingCosts[i] 表2021-02-28 16:20:4222
0
-
原创 LeetCode 5689. 统计匹配检索规则的物品数量
文章目录1. 题目2. 解题1. 题目给你一个数组 items ,其中 items[i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配 :ruleKey == "type" 且 ruleValue == typei 。ruleKey == "color" 且 ruleValue == colori2021-02-28 16:12:4923
0
-
原创 LeetCode 891. 子序列宽度之和(数学)
文章目录1. 题目2. 解题1. 题目给定一个整数数组 A ,考虑 A 的所有非空子序列。对于任意序列 S ,设 S 的宽度是 S 的最大元素和最小元素的差。返回 A 的所有子序列的宽度之和。由于答案可能非常大,请返回答案模 10^9+7。示例:输入:[2,1,3]输出:6解释:子序列为 [1],[2],[3],[2,1],[2,3],[1,3],[2,1,3] 。相应的宽度是 0,0,0,1,1,2,2 。这些宽度之和是 6 。 提示:1 <= A.length <2021-02-27 20:26:5228
0
-
原创 LeetCode 1178. 猜字谜(状态压缩+枚举二进制子集+哈希)
文章目录1. 题目2. 解题1. 题目外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底:单词 word 中包含谜面 puzzle 的第一个字母。单词 word 中的每一个字母都可以在谜面 puzzle 中找到。例如,如果字谜的谜面是 "abcdefg",那么可以作为谜底的单词有 "faced", "cabbage", 和 "baggage";而 "beefed"(不含字母2021-02-26 09:08:0095
1
-
原创 LeetCode 1771. 由子序列构造的最长回文串的长度(最长回文子序)
文章目录1. 题目2. 解题1. 题目给你两个字符串 word1 和 word2 ,请你按下述方法构造一个字符串:从 word1 中选出某个 非空 子序列 subsequence1 。从 word2 中选出某个 非空 子序列 subsequence2 。连接两个子序列 subsequence1 + subsequence2 ,得到字符串。返回可按上述方法构造的最长 回文串 的 长度 。如果无法构造回文串,返回 0 。字符串 s 的一个 子序列 是通过从 s 中删除一些(也可能不删除)字符2021-02-21 22:31:5742
0
-
原创 LeetCode 1770. 执行乘法运算的最大分数(DP)
文章目录1. 题目2. 解题1. 题目给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m ,数组下标 从 1 开始 计数。初始时,你的分数为 0 。你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要:选择数组 nums 开头处 或者 末尾处 的整数 x 。你获得 multipliers[i] * x 分,并累加到你的分数中。将 x 从数组 nums 中移除。在执行 m 步操作后,返回 最大 分数。示例 1:2021-02-21 21:14:1159
0
-
原创 LeetCode 1769. 移动所有球到每个盒子所需的最小操作数(前缀和)
文章目录1. 题目2. 解题1. 题目有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes ,其中 boxes[i] 的值为 '0' 表示第 i 个盒子是 空 的,而 boxes[i] 的值为 '1' 表示盒子里有 一个 小球。在一步操作中,你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。第 i 个盒子和第 j 个盒子相邻需满足 abs(i - j) == 1 。注意,操作执行后,某些盒子中可能会存在不止一个小球。返回一个长度为 n 的数组 answer ,其中 answer2021-02-21 19:47:0132
0
-
原创 LeetCode 1768. 交替合并字符串
文章目录1. 题目2. 解题1. 题目给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。示例 1:输入:word1 = "abc", word2 = "pqr"输出:"apbqcr"解释:字符串合并情况如下所示:word1: a b cword2: p q r合并后: a p b q c r示例 2:输入2021-02-21 17:58:1225
0
-
原创 LeetCode 1765. 地图中的最高点(BFS)
文章目录1. 题目2. 解题1. 题目给你一个大小为 m x n 的整数矩阵 isWater ,它代表了一个由 陆地 和 水域 单元格组成的地图。如果 isWater[i][j] == 0 ,格子 (i, j) 是一个 陆地 格子。如果 isWater[i][j] == 1 ,格子 (i, j) 是一个 水域 格子。你需要按照如下规则给每个单元格安排高度:每个格子的高度都必须是非负的。如果一个格子是是 水域 ,那么它的高度必须为 0 。任意相邻的格子高度差 至多 为 1 。当两个格子在正2021-02-21 16:31:5535
0
-
原创 LeetCode 1764. 通过连接另一个数组的子数组得到一个数组
文章目录1. 题目2. 解题1. 题目给你一个长度为 n 的二维整数数组 groups ,同时给你一个整数数组 nums 。你是否可以从 nums 中选出 n 个 不相交 的子数组,使得第 i 个子数组与 groups[i] (下标从 0 开始)完全相同,且如果 i > 0 ,那么第 (i-1) 个子数组在 nums 中出现的位置在第 i 个子数组前面。(也就是说,这些子数组在 nums 中出现的顺序需要与 groups 顺序相同)如果你可以找出这样的 n 个子数组,请你返回 true ,否则2021-02-21 16:14:4618
0
-
原创 LeetCode 1763. 最长的美好子字符串
文章目录1. 题目2. 解题1. 题目当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中,就称这个字符串 s 是 美好 字符串。比方说,"abABB" 是美好字符串,因为 ‘A’ 和 ‘a’ 同时出现了,且 ‘B’ 和 ‘b’ 也同时出现了。然而,"abA" 不是美好字符串因为 ‘b’ 出现了,而 ‘B’ 没有出现。给你一个字符串 s ,请你返回 s 最长的 美好子字符串 。如果有多个答案,请你返回 最早 出现的一个。如果不存在美好子字符串,请你返回一个空字符串。示例2021-02-21 14:10:5835
0
-
原创 LeetCode 1760. 袋子里最少数目的球(二分查找)
文章目录1. 题目2. 解题1. 题目给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。你可以进行如下操作至多 maxOperations 次:选择任意一个袋子,并将袋子里的球分到 2 个新的袋子中,每个袋子里都有 正整数 个球。比方说,一个袋子里有 5 个球,你可以把它们分到两个新袋子里,分别有 1 个和 4 个球,或者分别有 2 个和 3 个球。你的开销是单个袋子里球数目的 最大值 ,你想要 最小化 开销。请你2021-02-15 13:00:2784
0
-
原创 LeetCode 1759. 统计同构子字符串的数目
文章目录1. 题目2. 解题1. 题目给你一个字符串 s ,返回 s 中 同构子字符串 的数目。由于答案可能很大,只需返回对 10^9 + 7 取余 后的结果。同构字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同构字符串。子字符串 是字符串中的一个连续字符序列。示例 1:输入:s = "abbcccaa"输出:13解释:同构子字符串如下所列:"a" 出现 3 次。"aa" 出现 1 次。"b" 出现 2 次。"bb" 出现 1 次。"c" 出2021-02-15 11:46:1148
0
-
原创 LeetCode 1758. 生成交替二进制字符串的最少操作数(DP)
文章目录1. 题目2. 解题1. 题目给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中,你可以将任一 ‘0’ 变成 ‘1’ ,或者将 ‘1’ 变成 ‘0’ 。交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串 “010” 是交替字符串,而字符串 “0100” 不是。返回使 s 变成 交替字符串 所需的 最少 操作数。示例 1:输入:s = "0100"输出:1解释:如果将最后一个字符变为 '1' ,s 就变成 "012021-02-15 11:22:0572
0
-
原创 LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)
文章目录1. 题目2. 解题1. 题目给你一个整数数组 nums 和一个目标值 goal 。你需要从 nums 中选出一个子序列,使子序列元素总和最接近 goal 。也就是说,如果子序列元素和为 sum ,你需要 最小化绝对差 abs(sum - goal) 。返回 abs(sum - goal) 可能的 最小值 。注意,数组的子序列是通过移除原始数组中的某些元素(可能全部或无)而形成的数组。示例 1:输入:nums = [5,-7,3,5], goal = 6输出:0解释:选择整个数组2021-02-09 20:50:1247
0
-
原创 LeetCode 992. K 个不同整数的子数组(双指针)
文章目录1. 题目2. 解题1. 题目给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。)返回 A 中好子数组的数目。示例 1:输入:A = [1,2,1,2,3], K = 2输出:7解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2].2021-02-09 17:31:5527
0
-
原创 LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)
文章目录1. 题目2. 解题1. 题目给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。同时给你一个整数 k 表示你能参加的最多会议数目。你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日2021-02-07 22:30:1244
0
-
原创 LeetCode 1754. 构造字典序最大的合并字符串
文章目录1. 题目2. 解题1. 题目2. 解题遇到相同的字符,要往后找到能分出大小的位置,若一个已经到达末尾,则选择另一个class Solution {public: string largestMerge(string word1, string word2) { int n1 = word1.size(), n2 = word2.size(), i = 0, j = 0; string ans; ans.reserve(n1+n22021-02-07 20:34:1940
0
-
原创 LeetCode 1753. 移除石子的最大得分(优先队列)
文章目录1. 题目2. 解题2.1 优先队列2.2 脑筋急转弯1. 题目你正在玩一个单人游戏,面前放置着大小分别为 a、b 和 c 的 三堆 石子。每回合你都要从两个 不同的非空堆 中取出一颗石子,并在得分上加 1 分。当存在 两个或更多 的空堆时,游戏停止。给你三个整数 a 、b 和 c ,返回可以得到的 最大分数 。示例 1:输入:a = 2, b = 4, c = 6输出:6解释:石子起始状态是 (2, 4, 6) ,最优的一组操作是:- 从第一和第三堆取,2021-02-07 17:25:2348
1
-
原创 LeetCode 1752. 检查数组是否经排序和轮转得到
文章目录1. 题目2. 解题1. 题目给你一个数组 nums 。nums 的源数组中,所有元素与 nums 相同,但按非递减顺序排列。如果 nums 能够由源数组轮转若干位置(包括 0 个位置)得到,则返回 true ;否则,返回 false 。源数组中可能存在 重复项 。注意:我们称数组 A 在轮转 x 个位置后得到长度相同的数组 B ,当它们满足 A[i] == B[(i+x) % A.length] ,其中 % 为取余运算。示例 1:输入:nums = [3,4,5,1,2]输出:t2021-02-07 14:05:0334
0
-
原创 LeetCode 1750. 删除字符串两端相同字符后的最短长度(双指针)
文章目录1. 题目2. 解题1. 题目给你一个只包含字符 ‘a’,‘b’ 和 ‘c’ 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。前缀和后缀在字符串中任意位置都不能有交集。前缀和后缀包含的所有字符都要相同。同时删除前缀和后缀。请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。示例 1:输入:s = "ca"输出2021-02-07 00:18:4549
1
-
原创 LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)
文章目录1. 题目2. 解题1. 题目给你一个整数数组 nums 。一个子数组 [numsl, numsl+1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl + numsl+1 + ... + numsr-1 + numsr) 。请你找出 nums 中 和的绝对值 最大的任意子数组(可能为空),并返回该 最大值 。abs(x) 定义如下:如果 x 是负整数,那么 abs(x) = -x 。如果 x 是非负整数,那么 abs(x) = x 。示例 1:输2021-02-07 00:11:1850
0
-
原创 LeetCode 1748. 唯一元素的和
文章目录1. 题目2. 解题1. 题目给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。请你返回 nums 中唯一元素的 和 。示例 1:输入:nums = [1,2,3,2]输出:4解释:唯一元素为 [1,3] ,和为 4 。示例 2:输入:nums = [1,1,1,1,1]输出:0解释:没有唯一元素,和为 0 。示例 3 :输入:nums = [1,2,3,4,5]输出:15解释:唯一元素为 [1,2,3,4,5] ,和为 15 。 提2021-02-07 00:06:2262
0
-
原创 LeetCode 1745. 回文串分割 IV(区间DP)
文章目录1. 题目2. 解题1. 题目给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。示例 1:输入:s = "abcbdd"输出:true解释:"abcbdd" = "a" + "bcb" + "dd",三个子字符串都是回文的。示例 2:输入:s = "bcbddxy"输出:false解释:s 没办法被分割成 3 个回文子字符串。 提示:3 <2021-01-31 13:02:581012
5
-
原创 LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?(前缀和)
文章目录1. 题目2. 解题1. 题目给你一个下标从 0 开始的正整数数组 candiesCount ,其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。同时给你一个二维数组 queries ,其中 queries[i] = [favoriteTypei, favoriteDayi, dailyCapi] 。你按照如下规则进行一场游戏:你从第 0 天开始吃糖果。你在吃完 所有 第 i - 1 类糖果之前,不能 吃任何一颗第 i 类糖果。在吃完所有糖果之前,你必须每天 至2021-01-31 12:31:53171
4
-
原创 LeetCode 1743. 从相邻元素对还原数组(拓扑排序)
文章目录1. 题目2. 解题1. 题目存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是 [nums[i]2021-01-31 12:20:39103
0
-
原创 LeetCode 1742. 盒子中小球的最大数量
文章目录1. 题目2. 解题1. 题目你在一家生产小球的玩具厂工作,有 n 个小球,编号从 lowLimit 开始,到 highLimit 结束(包括 lowLimit 和 highLimit ,即 n == highLimit - lowLimit + 1)。另有无限数量的盒子,编号从 1 到 infinity 。你的工作是将每个小球放入盒子中,其中盒子的编号应当等于小球编号上每位数字的和。例如,编号 321 的小球应当放入编号 3 + 2 + 1 = 6 的盒子,而编号 10 的小球应当放入编2021-01-31 12:11:2784
0
-
原创 LeetCode 839. 相似字符串组(并查集)
文章目录1. 题目2. 解题1. 题目如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置);“rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。总之,它们通过相似性形成了两个关联组:{"tars", "rats", "arts"} 和 {"star"2021-01-31 10:21:4585
1
-
原创 LeetCode 1733. 需要教语言的最少人数(哈希+枚举)
文章目录1. 题目2. 解题1. 题目在一个由 m 个用户组成的社交网络里,我们获取到一些用户之间的好友关系。两个用户之间可以相互沟通的条件是他们都掌握同一门语言。给你一个整数 n ,数组 languages 和数组 friendships ,它们的含义如下:总共有 n 种语言,编号从 1 到 n 。languages[i] 是第 i 位用户掌握的语言集合。friendships[i] = [ui, vi] 表示 ui 和 vi2021-01-24 15:26:06853
1
-
原创 LeetCode 1738. 找出第 K 大的异或坐标值(DP)
文章目录1. 题目2. 解题1. 题目给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。请你找出 matrix 的所有坐标中第 k 大的值(k 的值从 1 开始计数)。示例 1:输入:matrix = [[5,2],[1,6]],2021-01-24 14:01:1384
0
-
原创 LeetCode 1737. 满足三条件之一需改变的最少字符数(计数)
文章目录1. 题目2. 解题1. 题目给你两个字符串 a 和 b ,二者均由小写字母组成。一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 。操作的最终目标是满足下列三个条件 之一 :a 中的 每个字母 在字母表中 严格小于 b 中的 每个字母 。b 中的 每个字母 在字母表中 严格小于 a 中的 每个字母 。a 和 b 都 由 同一个 字母组成。返回达成目标所需的 最少 操作数。示例 1:输入:a = "aba", b = "caa"输出:2解释:满足每个2021-01-24 13:35:4992
0
-
原创 LeetCode 1736. 替换隐藏数字得到的最晚时间
文章目录1. 题目2. 解题1. 题目给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。示例 1:输入:time = "2?:?0"输出:"23:50"解释:以数字 '2' 开头的最晚一小时是 23 ,以 '0' 结尾的最晚一分钟是 50 。示例 2:输入:time = "0?:3?2021-01-24 13:17:3471
0
-
原创 LeetCode 1734. 解码异或后的排列(位运算)
文章目录1. 题目2. 解题1. 题目给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] = perm[i] XOR perm[i + 1] 。比方说,如果 perm = [1,3,2] ,那么 encoded = [2,1] 。给你 encoded 数组,请你返回原始数组 perm 。题目保证答案存在且唯一。示例 1:输入:encoded = [3,1]输出:[12021-01-24 09:59:1491
0
-
原创 LeetCode 1732. 找到最高海拔
文章目录1. 题目2. 解题1. 题目有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。示例 1:输入:gain = [-5,1,5,0,-7]输出:1解释:海拔高度依次为 [0,-5,-4,1,1,-6] 。最高海拔为 1 。示例 2:2021-01-24 09:38:2571
0
-
原创 LeetCode 352. 将数据流变为多个不相交区间(map二分查找)
文章目录1. 题目2. 解题1. 题目给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。例如,假设数据流中的整数为 1,3,7,2,6,…,每次的总结为:[1, 1][1, 1], [3, 3][1, 1], [3, 3], [7, 7][1, 3], [7, 7][1, 3], [6, 7]进阶:如果有很多合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?来源:力扣(LeetCode)链接:https://leet2021-01-23 21:54:0283
0
-
原创 LeetCode 87. 扰乱字符串(记忆化递归 / DP)
文章目录1. 题目2. 解题1. 题目给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。下图是字符串 s1 = “great” 的一种可能的表示形式。 great / \ gr eat / \ / \g r e at / \ a t在扰乱这个字符串的过程中,我们可以挑选任何一个非叶节点,然后交换它的两个子节点。例如,如果我们挑选非叶节点 “gr” ,交换它的两个子2021-01-23 15:59:2870
0
-
原创 LeetCode 587. 安装栅栏 / LintCode 1152. 安装栅栏(凸包检测:排序+叉积正负判断+正反扫描+去重)
文章目录1. 题目2. 解题1. 题目在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。你需要找到正好位于栅栏边界上的树的坐标。示例 1:输入: [[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]]输出: [[1,1],[2,0],[4,2],[3,3],[2,4]]解释:示例 2:输入: [[1,2],[2,2],[4,2]]输出: [[1,22021-01-23 13:39:16856
4