LeetCode
小成想去看极光
~~~
展开
-
乐扣312 戳气球
问题描述 :有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明:你可以假设 nums[-1] = nums[n] = 1,但注意它们不原创 2020-09-02 10:20:04 · 102 阅读 · 0 评论 -
乐扣139单词拆分
问题描述 :给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, word原创 2020-09-01 14:27:26 · 86 阅读 · 0 评论 -
乐扣309:最佳购买股票时机含冷冻期
问题描述 :给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]输入说明 :首先输入prices数组元素数目n,然后输入n个整数思路:分原创 2020-09-01 13:30:49 · 114 阅读 · 0 评论 -
乐扣332 重新安排行程
问题描述给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前所有的机场都用三个大写字母表示(机场代码)。假定所有机票至少存在一种合理的行程。示例 1:输入:原创 2020-08-24 15:16:37 · 84 阅读 · 0 评论 -
乐扣74 OJ51:搜索二维矩阵 二分查找
问题描述 :编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。要求使用二分查找。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true示例 2:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23原创 2020-08-10 11:07:50 · 118 阅读 · 0 评论 -
乐扣T881 OJ23:救生艇 c++
问题描述 : 贪心算法第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2)示例 2:输入:people = [3,2,2,1], limit = 3输出:3解释:3 艘船分别载 (1, 2), (2) 和 (3)示例 3:输入原创 2020-07-18 18:24:27 · 157 阅读 · 0 评论 -
乐扣T122 OJ22:买卖股票的最佳时机 c++
问题描述 : 贪心算法给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在原创 2020-07-18 18:04:17 · 155 阅读 · 0 评论 -
乐扣T71 OJ:14简化路径 c++ ***
问题描述 :以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。原创 2020-07-13 22:59:58 · 170 阅读 · 0 评论 -
乐扣T394 OJ13:字符串解码 c++
问题描述 :给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例 1:输入:s = “3[a]2[bc]”输出:“aaabcbc”示例 2:输原创 2020-07-12 18:29:17 · 152 阅读 · 0 评论 -
乐扣T921 OJ11:使括号有效最少添加 c++
问题描述 :给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。从形式上讲,只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者它可以被写作 (A),其中 A 是有效字符串。给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。示例 1:输入:"())"输出:1示例 2:输入:"((("原创 2020-07-07 16:47:27 · 239 阅读 · 0 评论 -
乐扣T25 OJ10:K个一组翻转链表 c++(经典)
问题描述 :给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的原创 2020-07-07 16:28:57 · 135 阅读 · 0 评论 -
乐扣T1171 OJ9:从链表中删去总和值为0的连续节点 c++
问题描述 :给你一个链表的头节点 head,请你编写代码,反复删去链表中由总和值为 0 的连续节点组成的序列,直到不存在这样的序列为止。如果存在多个总和值为0的连续节点序列,优先删除位置靠前的序列。删除完毕后,请你返回最终结果链表的头节点。示例 1:输入:head = [1,2,-3,3,1]输出:[3,1]提示:答案 [1,2,1] 不正确。示例 2:输入:head = [1,2,3,-3,4]输出:[1,2,4]示例 3:输入:head = [1,2,3,-3,-2]输出:[1]原创 2020-07-07 14:13:44 · 158 阅读 · 0 评论 -
乐扣T1019 OJ8:链表中的下一个更大节点 c++
问题描述 :给出一个单向链表。链表中的节点分别编号为:node_1, node_2, node_3, … 。每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j.val,那么就有 j > i 且 node_j.val > node_i.val,而 j 是可能的选项中最小的那个。如果不存在这样的 j,那么下一个更大值为 0 。返回整数答案数组(代码中是vector) answer,其中 an原创 2020-07-06 22:25:54 · 189 阅读 · 0 评论 -
乐扣T24 OJ7:两两交换链表中的结点 c++
问题描述 :给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入范例:41 2 3 4输出范例:head–>2–>1–>4–>3–>tail#include<iostream>using namespace std;struct ListNode{ int val; struct ListNode *next; ListNode() : val(0),原创 2020-07-06 21:55:57 · 83 阅读 · 0 评论 -
乐扣T328 OJ6:奇偶链表 c++
问题描述 :给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6-原创 2020-07-05 22:16:06 · 95 阅读 · 0 评论 -
乐扣T725 OJ5:分隔链表 c++
问题描述 :给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]示例 1:输入:root = [1,原创 2020-07-05 17:55:28 · 121 阅读 · 0 评论 -
乐扣T817 OJ4:链表组件 c++
问题描述 :给定链表头结点 head,该链表上的每个结点都有一个唯一的整型值 。同时给定列表 G,该列表是上述链表中整型值的一个子集。返回列表 G 中组件的个数,这里对组件的定义为:链表中一段极长连续结点的值(该值必须在列表 G 中)构成的集合。极长的含义是:这段连续结点的前面或后面结点不属于G。示例 1:输入:head: 0->1->2->3G = [0, 1, 3]输出: 2解释:链表中,0 和 1 是相连接的,且 G 中不包含 2,所以 [0, 1] 是 G 的一原创 2020-07-04 22:24:18 · 154 阅读 · 0 评论 -
乐扣T148 OJ3:排序链表 c++
问题描述 :在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5输入范例:5-1 5 3 4 0输出范例:head–>-1–>0–>3–>4–>5–>tail思路:1、O(nlogn)的时间复杂原创 2020-07-04 17:28:21 · 205 阅读 · 0 评论 -
乐扣T61 OJ2:旋转链表 c++
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2->NU原创 2020-07-02 17:08:52 · 114 阅读 · 0 评论 -
乐扣T143 OJ1:重排链表 c++
问题描述 :给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.输入说明 :首先输入链表长度len,然后输入l原创 2020-07-02 15:21:37 · 135 阅读 · 0 评论