
刷题笔记
文章平均质量分 53
算法刷题笔记
egospace
物以聚类,人以群分
展开
-
Leetcode 题解 [746-使用最小花费爬楼梯] (C)
题目链接题目描述给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1:输入:cost = [10,15,20]输出:15解释:你将从下标为 1 的台阶开始。支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。示例 2:输入:cost = [1,100,1,1,1,100,1原创 2022-03-13 17:06:00 · 925 阅读 · 0 评论 -
Acwing 题解 [acwing-2041-干草堆] (Cpp)
题目链接题目描述贝茜对她最近在农场周围造成的一切恶作剧感到抱歉,她同意帮助农夫约翰把一批新到的干草捆堆起来。开始时,共有 N 个空干草堆,编号 1∼N。约翰给贝茜下达了 K 个指令,每条指令的格式为 A B,这意味着贝茜要在 A…B范围内的每个干草堆的顶部添加一个新的干草捆。例如,如果贝茜收到指令 10 13,则她应在干草堆 10,11,12,1310,11,12,13 中各添加一个干草捆。在贝茜完成了所有指令后,约翰想知道 N 个干草堆的中值高度——也就是说,如果干草堆按照高度从小到大排列,位原创 2022-01-03 20:08:04 · 533 阅读 · 0 评论 -
NewOJ 题解 [newoj-1053-最大公约数] (Python)
题目链接题目描述求两个正整数a,b的最大公约数。输入格式输入有若干行,每行有两个被空格隔开的正整数a、b,数字不超过10^9输出格式对于每一行,对应输出a、b的最大公约数。输入样例3 56 920 16输出样例134思路 用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。例如,求(319,377):∵ 319÷37原创 2022-01-03 16:09:42 · 384 阅读 · 0 评论 -
NewOJ 题解 [newoj-1040-阶乘之和] (Python)
题目链接题目描述求1!+2!+3!+…+n!,由于答案很大,答案对998244353求余即可。输入格式输入存在多组测试数据,对于每组测试数据输入一个正整数n(1<=n<=10^6)输出格式对于每组测试数据输出一行表示答案。输入样例15输出样例1153思路这道题,想必大家都知道如何计算,如果在测试数据量比较小的情况下,按照我们原来的方法是没有错的,但是当数据量比较大的情况下,我们原来的那样计算方法,会大大的增加运行时间。解决这道题的核心就是用空间换时间,将之前每次原创 2022-01-02 11:27:47 · 1098 阅读 · 0 评论 -
NewOJ 题解 [1037-阶乘末尾0的个数一] (Python)
题目链接题目描述求N的阶乘末尾存在多少个0。输入格式输入存在多组测试数据,对于每组测试数据输入一个整数N(0<=N<=10^9)输出格式对于每组测试数据,输出一行表示答案。输入样例1220输出样例24思路通过观察可得,从0开始数字每增加5时,阶层末尾0的个数会增加1个,当增加的5的次数为5的倍数的时候会在此基础上再加1个。阶乘末尾0的个数有以下递推表达式Z = x//5 + x//525^252 + x//535^353+…+x//5n5^n5n代码实现原创 2022-01-01 20:30:41 · 492 阅读 · 0 评论 -
ACwing 题解 [66.两个链表的第一公共结点](Cpp)
题目链接题目描述输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。数据范围链表长度 [1,2000]。样例给出两个链表如下所示:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3输出第一个公共节点c1思路这里的难点在于两个链表的长度可能不一致,会导致指针的不同步原创 2021-12-27 16:49:18 · 376 阅读 · 0 评论 -
ACwing 题解 [822.走方格](Cpp)
给定一个 n×mn×m 的方格阵,沿着方格的边线走,从左上角 (0,0)(0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m)(n,m) 一共有多少种不同的走法。原创 2021-12-24 10:57:46 · 661 阅读 · 0 评论 -
Leetcode 题解 [414.第三大的数](Java)
Leetcode 题解(每日打卡)[414.第三大的数]题目链接题目描述给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有原创 2021-10-06 10:31:34 · 190 阅读 · 0 评论 -
Leetcode 题解 [482.密钥格式化](Java)
Leetcode 题解(每日打卡)[482.密钥格式化]题目链接题目描述有一个密钥字符串 S ,只包含字母,数字以及 ‘-’(破折号)。其中, N 个 ‘-’ 将字符串分成了 N+1 组。给你一个数字 K,请你重新格式化字符串,使每个分组恰好包含 K 个字符。特别地,第一个分组包含的字符个数必须小于等于 K,但至少要包含 1 个字符。两个分组之间需要用 ‘-’(破折号)隔开,并且将所有的小写字母转换为大写字母。给定非空字符串 S 和数字 K,按照上面描述的规则进行格式化。思路根据题目的意思原创 2021-10-04 10:26:06 · 214 阅读 · 0 评论 -
Leetcode 题解 [1436.旅行终点站](Java)
Leetcode 题解(每日打卡)[1436.旅行终点站]题目链接题目描述给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。题目数据保证线路图会形成一条不存在循环的线路,因此恰有一个旅行终点站。思路一:通过观察可知终点有一个特点,就是出现[x,y]中的后一位且只出现一次,故我们可以利用hash原创 2021-10-01 10:45:16 · 194 阅读 · 0 评论 -
Leetcode 题解 [2.两数之和](Java)
Leetcode 题解(每日打卡)[2.两数之和]题目链接题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。思路由于两个链表是逆序存储,所要计算得到结果就是t.val = (l1+l2+j)%10j = (l1+l2+j)/10j:进位t.val:本位代码实现/** * Definiti原创 2021-10-01 09:51:34 · 120 阅读 · 0 评论 -
Leetcode 题解 [223.矩形面积](Java)
Leetcode 题解(每日打卡)[223.矩形面积]题目链接题目描述给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。每个矩形由其 左下 顶点和 右上 顶点坐标表示:第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。示例 1:输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -原创 2021-09-30 16:08:04 · 232 阅读 · 0 评论 -
Leetcode 题解 [430. 扁平化多级双向链表](Java)
Leetcode 题解(每日打卡)[430. 扁平化多级双向链表]题目链接题目描述多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。思路一 将多级双向链表转换成单级双链表,我们可以对每个节点进行检查,如果该结点有child就把next指向该孩子结点并一直遍历下去,当遍历完整个孩原创 2021-09-24 17:15:13 · 141 阅读 · 0 评论 -
Leetcode 题解 [725.分隔链表](Java)
Leetcode 题解(每日打卡)[725.分隔链表]题目链接题目描述给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。这 k 个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。返回一个由上述 k 部分组成的数组。思路 根据题目意思可知,要达到***每部分的长度应该尽可能的相等:任意两部分的原创 2021-09-22 16:38:33 · 158 阅读 · 0 评论 -
Leetcode 题解 [162.寻找峰值](C++)
Leetcode 题解(每日打卡)[162.寻找峰值]题目链接题目描述峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。示例1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例2:输入:nu原创 2021-09-15 17:10:16 · 240 阅读 · 0 评论 -
Leetcode 题解 [121.买卖股票的最佳时机](C++)
Leetcode 题解(每日打卡)[121.买卖股票的最佳时机]题目链接题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0思路利用一个大小为4的数组,分别记录min、min_index、max、max_index示例1理解:原: [7,原创 2021-09-05 21:16:07 · 197 阅读 · 0 评论 -
Leetcode 题解[67.二进制求和](C语言)憨憨解法
Leetcode 题解(每日打卡)[67.二进制求和]题目链接题目描述给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。思路1:模拟二进制的运算该题,我们就模拟二进制的计算,t为进位符,,若产生进位,则t为1,否则为0,初始的t看做0,也可以像下表一样,将t看做一个初始值全为0的数组。a: 1 0 1 0b: 1 0 1 1 t: 0 0 0 0然后我们每一列,从后向前相加,为了节省空间并将运算后的结果覆盖到最长的那个字符串数组中,可以原创 2021-01-25 11:50:52 · 438 阅读 · 0 评论 -
Leetcode 题解 [14.最长公共前缀][674.最长连续递增序列](C语言)
Leetcode 题解(每日打卡)[14.最长公共前缀]题目链接题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。思路1:纵向扫描法该题,我们可以把这个字符串数组看作一个矩阵。f l o w e rf l o wf l i g h t思路很简单,就是扫描每一列,如果该列全都相同的话,则为最大公共前缀,否则,该列不为最大公共前缀,并退出,返回最大公共前缀。时间复杂度 : O(mn)空间复杂度: O(1)代码实现char * longe原创 2021-01-24 11:42:56 · 282 阅读 · 2 评论 -
Leetcode 题解 [66.加一](C语言)
Leetcode 题解(每日打卡)[66.加一]题目链接题目描述给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。思路将数组从后往前遍历,若取出的元素为9的话,则令该位置的值为0,继续遍历,若当i>0时,该值不为9,则该值加1,并返回数组,否则创建新数组,并令数组第0个元素为1,其余元素均为0。其实该题总共就只有三种情况:不进位进位,但是进位后原创 2021-01-23 19:16:08 · 194 阅读 · 1 评论