
算法刷题
林间影子
但行千里路,自有到来风!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode-037-290. 单词规律
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:输入:pattern = "abba", str = "dog cat cat fish"输出: false示例 3:输入: pattern原创 2020-12-16 16:18:35 · 298 阅读 · 1 评论 -
leetcode-036-738. 单调递增的数字
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299说明: N 是在 [0, 10^9] 范围内的一个整数。来源:力扣(LeetCode)链接:https://leetco.原创 2020-12-15 14:37:07 · 258 阅读 · 0 评论 -
leetcode-035-49. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明: 所有输入均为小写字母。 不考虑答案输出的顺序。思路:每个 string 排序后的字符串作为 map 的 key, value 为 vector<string&g原创 2020-12-14 17:17:37 · 247 阅读 · 0 评论 -
leetcode-034-649. Dota2 参议院
649. Dota2 参议院Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项: 禁止一名参议员的权利: 参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。 宣布胜利: 如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利原创 2020-12-14 16:08:40 · 218 阅读 · 0 评论 -
leetcode-033-860. 柠檬水找零
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。原创 2020-12-14 16:08:03 · 115 阅读 · 0 评论 -
leetcode-032-62. 不同路径
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径? 【图片】示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右转载 2020-12-14 16:07:28 · 109 阅读 · 0 评论 -
leetcode-031-842. 将数组拆分成斐波那契序列
给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]。形式上,斐波那契式序列是一个非负整数列表 F,且满足: 0 <= F[i] <= 2^31 - 1,(也就是说,每个整数都符合 32 位有符号整数类型); F.length >= 3; 对于所有的0 <= i < F.length - 2,都有 F[i] + F[i+1] = F[i+2] 成立。另外,请注意,将字符串原创 2020-12-14 16:06:32 · 124 阅读 · 0 评论 -
leetcode-030-861. 翻转矩阵后的得分
有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b1111原创 2020-12-14 16:05:22 · 335 阅读 · 0 评论 -
leetcode-029-118. 杨辉三角
118. 杨辉三角给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例: 输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]示例无法给出,但是对于杨辉三角,大家都知道。这个代码也没什么写头,思路更不用讲了:class Solution {public: vector<vector<int>&原创 2020-12-14 10:32:08 · 100 阅读 · 0 评论 -
leetcode-028-204. 计数质数
204. 计数质数统计所有小于非负整数 n 的质数的数量。 示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0 提示: 0 <= n <= 5 * 106class Solution {public:int countPrimes(int n) {if(n <= 2)return 0;原创 2020-12-04 11:10:24 · 127 阅读 · 0 评论 -
leetcode-027-34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:原创 2020-12-01 11:51:19 · 124 阅读 · 0 评论 -
leetcode-026-767. 重构字符串
767. 重构字符串给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例 1:输入: S = "aab"输出: "aba"示例 2:输入: S = "aaab"输出: ""注意: S 只包含小写字母并且长度在[1, 500]区间内。今天不怎么有精神,所以最开始搞的时候方向错了。我选择的是广搜和深搜,一顿错做猛如虎,发现超时。看了题解是堆排序和插入法,果断选择插入法,不过堆排序还是要搞得,原创 2020-11-30 17:32:10 · 164 阅读 · 0 评论 -
leetcode-025-454. 四数相加 II
454. 四数相加 II给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。例如:输入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [ 0, 2]输原创 2020-11-27 10:19:06 · 117 阅读 · 0 评论 -
leetcode-024-164. 最大间距
164. 最大间距给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。说明: 你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。 请尝试在线性时间原创 2020-11-26 11:23:08 · 198 阅读 · 0 评论 -
leetcode-023-1370. 上升下降字符串
给你一个字符串 s ,请你根据下面的算法重新构造字符串: 从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。 从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。 重复步骤 2 ,直到你没法从 s 中选择字符。 从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。 从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。 重复步骤 5 ,直到你没法从 s 中原创 2020-11-25 10:20:04 · 162 阅读 · 0 评论 -
leetcode-022-222. 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入: 1 / \ 2 3 / \ /4 5 6输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-complete-tree-no原创 2020-11-24 09:42:00 · 99 阅读 · 0 评论 -
leetcode-021-452. 用最少数量的箭引爆气球
021在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引.原创 2020-11-23 12:30:50 · 137 阅读 · 0 评论 -
leetcode-020-125. 验证回文串
当别人否定你的时候,更重要的是做好自己。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-palindrome著作权归领扣.原创 2020-06-19 16:11:39 · 204 阅读 · 0 评论 -
leetcode-019-1028. 从先序遍历还原二叉树
刷题的速度太慢,一下午就写了一题,坑坑绊绊的。对 C++ 语言掌握的不好对问题的理解缺失不彻底在写 code 的时候,思路不够清晰我们从二叉树的根节点 root 开始进行深度优先搜索。在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度),然后输出该节点的值。(如果节点的深度为 D,则其直接子节点的深度为 D + 1。根节点的深度为 0)。如果节点只有一个子节点,那么保证该子节点为左子节点。给出遍历输出 S,还原树并返回其根节点 root。 示例 1:.原创 2020-06-19 11:15:25 · 180 阅读 · 0 评论 -
leetcode-018-1014. 最佳观光组合
给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。 示例:输入:[8,1,5,2,6]输出:11解释:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11 提示: 2 <= A.le原创 2020-06-17 11:11:59 · 118 阅读 · 0 评论 -
leetcode-017-297. 二叉树的序列化与反序列化
我又又又开始刷题了。。。不过这么一天两个小时,其实还是蛮浪费时间的,毕竟我对C++其实并不是特别熟悉,所以很多时候花费在语法上面的时间,就很磨人。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。.原创 2020-06-16 19:46:30 · 166 阅读 · 0 评论 -
leetcode-016-69. x 的平方根
感觉越是简单的题目。对逻辑的要求其实也就越清晰,这种code 还需要反复调试,感觉自己的大脑是真的迟钝。从今天开始,全力工作,不能再做个游曳于虚度的少年了。实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。来源:.原创 2020-05-09 08:46:27 · 174 阅读 · 0 评论 -
leetcode-015-221. 最大正方形
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注...原创 2020-05-09 08:29:14 · 160 阅读 · 0 评论 -
leetcode-014-572. 另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的结...原创 2020-05-07 21:38:20 · 138 阅读 · 0 评论 -
leetcode-013-983. 最低票价
在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式: 一张为期一天的通行证售价为 costs[0] 美元; 一张为期七天的通行证售价为 costs[1] 美元; 一张为期三十天的通行证售价为 costs[2] 美元。通行证...原创 2020-05-06 21:45:21 · 231 阅读 · 0 评论 -
leetcode-012-98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \...原创 2020-05-05 06:44:39 · 211 阅读 · 0 评论 -
leetcode-011-45. 跳跃游戏 II
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。来源:力扣(LeetCode)链...原创 2020-05-04 18:09:03 · 154 阅读 · 0 评论 -
leetcode-010-53. 最大子序和
昨天打游戏玩到凌晨,今天真的好困呀。。给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。以前打ACM的时候就...原创 2020-05-03 07:02:34 · 137 阅读 · 0 评论 -
leetcode-009-3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 ...原创 2020-05-02 23:07:42 · 131 阅读 · 0 评论 -
leetcode-008-21. 合并两个有序链表
怎么说,虽然简单,但是真的想写好,还真不容易。将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/m...原创 2020-05-01 09:36:44 · 111 阅读 · 0 评论 -
leetcode-007-202. 快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。 示例:输入:19输出:true解释:12 + 92 = 828...原创 2020-04-30 08:24:48 · 187 阅读 · 0 评论 -
leetcode-006-1095. 山脉数组中查找目标值
拔了两个智齿,耽误了两天,又堕落了两天,四天没有刷题,也没有工作。感觉我需要重新找寻计算机带给我的快乐,这样才有持续的动力。(这是一个 交互式问题 )给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。如果不存在这样的下标 index,就请返回 -1。 何为山脉数组?如果...原创 2020-04-29 16:17:45 · 166 阅读 · 0 评论 -
leetcode-005-51. 数组中的逆序对
第五天刷题,嗯,深呼吸,要坚持呀!在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1:输入: [7,5,6,4]输出: 5 限制:0 <= 数组长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problem...原创 2020-04-24 11:08:53 · 238 阅读 · 0 评论 -
leetcode-004-0811. 硬币
DP的问题让我这个小白很头疼,其实我做算法题目很久了,有快乐的回忆,也有不快乐的回忆。当我大一的时候,就接触了算法题目,并且觉得很喜欢,但是直到大四,我还在搞一些简单的算法题。我始终不知道问题出在哪儿,这让我四年的大学过得虚伪又虚度。但过去的事情就过去了,问题出现在我只想满足自己多巴胺,不敢去真的挑战那些我不会的东西。历史不会原谅任何一个人,也不会记住任何一个不值得被原谅的人。当我错过很多精彩的...原创 2020-04-23 17:39:33 · 152 阅读 · 0 评论 -
leetcode-003-199. 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---来源:力扣(LeetCo...原创 2020-04-22 09:15:39 · 139 阅读 · 0 评论 -
leetcode-002-1248. 统计「优美子数组」
代码怎么运算的更快?怎么样内存更小?原创 2020-04-21 12:37:52 · 228 阅读 · 0 评论 -
leetcode-001-200. 岛屿数量
力扣的这一题把我搞死了,题目的描述和解题思路实际都挺简单的,但是呢,我对C++的语法生疏的太厉害,在小细节的设置太差劲了,所以这一题必须记录一下:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:11110...原创 2020-04-20 14:38:15 · 296 阅读 · 0 评论