![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣刷题
文章平均质量分 55
Alaso_soso
这个作者很懒,什么都没留下…
展开
-
496. 下一个更大元素 I(单调栈)
给你两个 没有重复元素 的数组nums1 和nums2,其中nums1是nums2的子集。请你找出 nums1中每个元素在nums2中的下一个比其大的值。nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于 num1 中的数字 4 ,你无法在第...原创 2021-09-06 11:03:46 · 59 阅读 · 0 评论 -
997. 找到小镇的法官(图,哈希表)
题目描述:在一个小镇里,按从 1 到 n 为 n 个人进行编号。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足条件 1 和条件 2 。给定数组trust,该数组由信任对 trust[i] = [a, b]组成,表示编号为 a 的人信任编号为 b 的人。如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的编号。否则,返回 -1。示例 1:输入:n = 2, ..原创 2021-09-05 13:22:30 · 87 阅读 · 0 评论 -
112. 路径总和(树的遍历)
「代码随想录」带你学透二叉树!112. 路径总和与113. 路径总和II【递归】【回溯】【迭代】详解 - 路径总和 - 力扣(LeetCode) (leetcode-cn.com)题目描述:给你二叉树的根节点root 和一个表示目标和的整数targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,...原创 2021-09-05 12:15:11 · 89 阅读 · 0 评论 -
39. 组合总和(递归)
给定一个无重复元素的正整数数组candidates和一个正整数target,找出candidates中所有可以使数字和为目标数target的唯一组合。candidates中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为target 的唯一组合数少于 150 个。示例1:输入: candidates = [2,3,6,7], target = 7输出: [[7],[2,2,3]]示例2:输入: ca...原创 2021-09-05 11:47:29 · 115 阅读 · 0 评论 -
881. 救生艇(贪心)
题目描述:第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:...原创 2021-09-04 23:42:27 · 106 阅读 · 0 评论 -
394. 字符串解码(栈)
题目描述:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。示例 1:输入:s = "3[a]2[bc]"输出:"aaabcbc...原创 2021-09-04 12:31:25 · 119 阅读 · 0 评论 -
148. 排序链表(归并排序)
题目描述:给你链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]提示:链表中节点的数目在范围[0, 5 * 104]内-105<= ...原创 2021-09-04 11:55:19 · 178 阅读 · 0 评论 -
61. 旋转链表
题目描述:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动k个位置。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]提示:链表中节点的数目在范围 [0, 500] 内-100 <= Node.val <= 1000 <= k <= 2 * 109思路解析:变量设置解释:last指针指向链...原创 2021-09-02 17:51:27 · 65 阅读 · 0 评论 -
1190. 反转每对括号间的子串(栈)
给出一个字符串s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例 1:输入:s = "(abcd)"输出:"dcba"示例 2:输入:s = "(u(love)i)"输出:"iloveu"解释:先反转子字符串 "love" ,然后反转整个字符串。示例 3:输入:s = "(ed(et(oc))el)"输出:"leetcode"解释:先反转子字符串 "oc" ,接..原创 2021-08-31 22:46:37 · 132 阅读 · 0 评论 -
698. 划分为k个相等的子集(递归,回溯)
题目描述:算法思路:感觉有桶的思想,定义一个大小为k,初始值为ave的容器定义递归函数:参数传入,nums,k,nums的当前下标(地方时,从最后一个index进行传入),以及bucket。递归结束条件为:当cur当前的下标小于0说明递归结束,返回true剪枝操作:当数组的cur指向的值等于桶i的大小,或者桶i的大小减去数组cur指向的值大于等于nums数组最小值的时候(两者相减比最小值还小,说明这个桶肯定不能构成ave),进行下面的操作。满足上面的条件的情况下,将nums[c原创 2021-08-31 20:35:55 · 236 阅读 · 0 评论 -
107. 二叉树的层序遍历 II(广度优先搜索)
题目描述:首先我们考虑一下如何进行层次遍历,【3】 【9,20】 【15,7】我们可以先看看普通的层次遍历如何实现,广度优先搜索需要借助一个特殊的数据结构进行实现,那就是队列,队列的特点先进先出,符合我们的要求。深度优先搜索...原创 2021-08-30 17:07:45 · 85 阅读 · 0 评论 -
81. 搜索旋转排序数组 II(二分查找)
题目描述:已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,.原创 2021-08-30 13:07:41 · 163 阅读 · 0 评论 -
36. 有效的数独(哈希表数组)
题目描述:请你判断一个9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。输入:board =[["5","3",".","."...原创 2021-08-30 11:12:12 · 160 阅读 · 0 评论 -
332. 重新安排行程(图,dfs(深度优先搜索))
题目描述:转载 2021-08-29 22:08:10 · 175 阅读 · 0 评论 -
周游加拿大
问题描述:你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票。旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市。每个城市只能访问一次,除了旅行开始的城市之外,这个城市必定要被访问两次(在旅行的开始和结束)。你不允许使用其他公司的航线或者用其他的交通工具。 给出这个航空公司开放的城市的列表,和两两城市之间的直达航线列表。找出能够访问尽可能多的城市的路线,这条路线必须满足上述条件,也就是从列表中的第一个城市开始旅行,访问到列表转载 2021-08-25 23:49:53 · 404 阅读 · 0 评论 -
木棍还原(深度优先搜索)
问题描述 : 小明有一些相同长度的木棍,他将它们随机切割,直到所有切割后的短棍长度不超过50。现在他想把棍子恢复到原来的状态,但他忘了他原来有多少根棍子(但知道至少有两根),也不知道它们原来有多长。请帮助他,设计一个程序,计算出这些棍子的最小原始长度。输入说明 :输入包含多组数据,每组数据包含2行。第一行包含切割后的短棍的数量n,n<=64。第二行包含这些短棍的长度,由空格分隔。所有长度值都是大于0的整数。最后一组数据之后是一个0,表示输入结束。输出说明 :为每组数.转载 2021-08-25 22:19:53 · 2606 阅读 · 0 评论 -
二叉树深度的中间值(后序遍历)
题目描述:给定一个二叉树,找出其叶子节点深度的中间值。叶子节点的深度是从根节点到叶子节点的路径上的节点数量。 最小深度是从根节点到最近叶子节点的路径上的节点数量。最大深度是从根节点到最远叶子节点的路径上的节点数量。中间值为叶子节点最小深度和最大深度的平均值。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7它的最小深度...原创 2021-08-25 16:03:42 · 547 阅读 · 0 评论 -
62. 不同路径(dp)
题目描述:算法思路:这是一题简单的dp题:首先我们想考虑一下子问题,一个方格时,只有一条路,一行两列时,到达每个方格的路径和还是一条。两行两列时,到达第一行的每个方格路径和还是1,到达第一列的每个方格还是一条,但是到达右下角的目标地点,就有1+1两条路径了。讲到这有没有发现这道题的初始状态和状态方程如何实现? ❤ 1(i,j-1) 1 1 1 1 1 1(i-1,j) 2(i,j) 3 4 5 .原创 2021-08-25 11:32:34 · 71 阅读 · 0 评论 -
1023. 驼峰式匹配(字符匹配)
题目描述:如果我们可以将小写字母插入模式串pattern得到待查询项query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)给定待查询列表queries,和模式串pattern,返回由布尔值组成的答案列表answer。只有在待查项queries[i] 与模式串pattern 匹配时,answer[i]才为 true,否则为 false。示例一:输入:queries = ["FooBar","FooBarTest","Foot...原创 2021-08-25 11:07:24 · 163 阅读 · 0 评论 -
720. 词典中最长的单词(其他)
题目描述:给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。算法思路:首先需要对words中的元素进行排序 设置一个存储结果的变量res,利用set实现保存,去重和排序 遍历words中的每一个元素,当满足单词长度为1,或者截取的length-1长度的单词可以在set中找到,我们就将遍历到的这个单词插入到set中,更新r.原创 2021-08-23 18:55:03 · 158 阅读 · 0 评论 -
101. 对称二叉树(easy,树,深度优先搜索)
题目描述:算法思想:看思路的时候可以看题目中的第一个输出例子。本题利用dfd来实现树的遍历,在遍历的过程中考虑需要做的事情。dfs函数中需要两个参数,就是根结点的左右子树的根结点。因为需要深度搜索判断整棵树是否对称。 首先处理特殊的情况:当根节点的左子树为空,然而右子树不为空时,返回false 当根结点的右子树为空,然而左子树不为空时,返回false 当只有根结点的时候,返回true 一棵树只有三个结点时,要判断根结点的左右结点的值val是否相同,same时,返回true接下.原创 2021-08-22 16:29:02 · 93 阅读 · 0 评论 -
746. 使用最小花费爬楼梯(动态规划dp)
题目描述:算法思路:首先定义dp[i]代表的含义:定义dp[i]表示踏上第i阶台阶的最小花费。 确定状态方程: 由上图所示:到达i阶有两种方式:方式一:从i-1层跳一层,跳到i阶,然后就到达top层(结束的位置)因此:到达top需要 的花费为dp[i-1]+cost[i](爬上i-1层最小花费,加上i到top的花费cost[i]) 方式二:从i-1层跳两层,到达第i层,然后从i跳到top层结束,因此:到达top需要的花费为dp[i-2]+cost[i](爬上i-2层最小花费..原创 2021-08-22 23:20:53 · 107 阅读 · 0 评论 -
207. 课程表(深度优先搜索,图)
题目描述:算法思路:这是一个关于图的搜索问题(拓扑排序)可以使用深度优先搜索(搭配一个栈实现,寻找出度为0的结点),当然也可以使用广度优先搜索(搭配一个队列实现)本题是一道经典的「拓扑排序」问题。我们就可以将本题建模成一个求拓扑排序的问题了:我们将每一门课看成一个节点; 如果想要学习课程 A之前必须完成课程 B,那么我们从 B 到 A 连接一条有向边。这样以来,在拓扑排序中,B 一定出现在 A 的前面。B是A的先行课。 具体实现看代码解析。代码实现:cl...原创 2021-08-22 22:36:25 · 142 阅读 · 0 评论 -
451. 根据字符出现频率排序(哈希表)
题目描述:算法实现:本题主要通过哈希表进行实现,使用unordered_map实现哈希表,当然也可以使用map,两者区别在于一个有序,一个无序(简单的讲)首先定义一个unordered_map<char,int> mp(<字符,出现次数>),实现哈希表,实现对string中的字符出现个数进行计数。 map的使用方法相比大家很熟悉,这里的mp的first存储的为字符,second存储的为出现的次数。使用'.'可以直接访问。 为了便于输出,定义一个容器vector&原创 2021-08-22 18:56:03 · 286 阅读 · 0 评论 -
74. 搜索二维矩阵(二分查找应用)
题目描述:编写一个高效的算法来判断m x n矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。原创 2021-08-22 18:16:22 · 121 阅读 · 0 评论 -
794. 有效的井字游戏(字符串,数组,枚举)
题目描述:示例 1:输入: board = ["O", "", ""]输出: false解释: 第一个玩家总是放置“X”。示例 2:输入: board = ["XOX", " X ", " "]输出: false解释: 玩家应该是轮流放置的。示例 3:输入: board = ["XXX", " ", "OOO"]输出: false示例 4:输入: board = ["XOX", "O O", "XOX"]输出: truecl...原创 2021-08-22 15:03:11 · 75 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II(贪心easy)
题目描述:算法思想:这是一道关于贪心的简单题。(想出来了就简单了)因为题目中不限制买卖的次数,因此我们只需要在有利可图的情况下,累加收益就可以了,也就是在后一天减去前一天,只要其结果是大于0的我们都累加到我们的收益中就可以了。代码实现:class Solution {public: int maxProfit(vector<int>& prices) { int result=0; for(int i=1;i<原创 2021-08-21 20:48:21 · 85 阅读 · 0 评论 -
921. 使括号有效的最少添加(栈)
题目:算法思路:本题主要考察栈的使用,当然可以使用stack实现,也可以用vector来实现栈的操作。设置一个变量len保存string s的长度,res记录结果(这里可以解释为当先出现')'时,需要一个变量记录需要添加的‘(’的数量。) 遍历s,当遇到‘(’时,将字符入栈(push),当字符为')'时,res自加,其他情况进行出栈(pop)操作。 最后函数的返回为res+栈的大小。大家可以拿这个实例进行带入,就可以理解res变量的设置原因。以及返回结果为什么这样设置。..原创 2021-08-21 20:24:29 · 107 阅读 · 0 评论 -
143. 重排链表
算法思想:递归实现:设置指针pre,cur,temp。 pre指向cur的前一个结点,首先初始化cur为头结点,pre为空,temp用来记录head->next这个结点。 首先处理特殊情况:链表为空,一个结点,两个结点的情况下直接返回。 利用while循环将cur指向最后一个元素,pre指向cur前一个元素。 while(curr->next){ pre=curr; curr=curr->next; ...原创 2021-08-21 20:04:41 · 102 阅读 · 0 评论 -
27. 移除元素
题目:给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,...原创 2021-08-17 18:36:02 · 53 阅读 · 0 评论 -
704. 二分查找
题目:给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1这是一道简单的二分查...原创 2021-08-17 17:29:49 · 332 阅读 · 0 评论 -
757. 设置交集大小至少为2(贪心)
题目描述:一个整数区间[a, b](a < b) 代表着从a到b的所有连续整数,包括a和b。给你一组整数区间intervals,请找到一个最小的集合 S,使得 S 里的元素与区间intervals中的每一个整数区间都至少有2个元素相交。输出这个最小集合S的大小。输出实例:解题思路:对于每个区间,先将intervals进行排序,对于元素[s,e],按照s升序排列,s相同的情况下,按照e降序排列。 static bool cmp(vector&...原创 2021-08-17 16:30:04 · 296 阅读 · 0 评论