- 博客(695)
- 收藏
- 关注
原创 ACM OI专题 知识题目分类
图论二分图匈牙利算法HK算法最小路径重复点覆盖最小路径点覆盖最大独立集最小点覆盖KM算法一般图匹配-带花树最短路FloydDjkstraSPFA最小生成树LCA连通性差分约束...
2020-02-28 21:13:57 708
原创 1814. 统计一个数组中好对子的数目
很明显我们可以用哈希表来求解。用哈希表来保存某个数出现的次数,我们从前往后遍历数组中所有数,对于当前数x来说,我们求得。,由于哈希表里面保存的都是以前某个nums[i]+rev(nums[i])出现的次数,那么我们直接累加以前。, n为数组长度,m为数组中最大值。那么问题就转化为:求出。
2023-01-17 09:59:55 1030 1
原创 1813. 句子相似性 III
首先通过分析题目可以直到插入的句子必然是中间的句子,那么我们先用空格分割所有的单词,然后统计左边相等单词的数量,再统计右边相等单词的数量,若两个数量之和等于最小单词数,那么代表可以往这个单词中间添加一些单词使得两个字符串相等。
2023-01-16 09:52:35 227
原创 1819. 序列中不同最大公约数的数目
最大公因数为6,但是他们都是3的倍数。但是,随着x的倍数个数增加,那么整个字序列的最大公因数一定会减少或不变,如。我们还是根据gcd的性质出发,设gcd = x, 那么子序列。因此最多nlogn次操作我们就能枚举完所有的gcd倍数,求得整个子序列的gcd答案。,但是有可能有些数都是gcd倍数,但是最大公因数也不等于gcd。因此我们枚举所有x的倍数,若存在于nums中则添加进当前子序列。,直接通过子序列来计算gcd的个数肯定不可行。, 根据GCD的性质不难发现,最大的gcd也不可能超过。
2023-01-14 09:40:17 852
原创 753. 破解保险箱
由于每次只取最后一个字符来进行移动,例如n=3,k=2时,那么对于000,可以转化为000,001, 对于011,可以转化为110,111。根据观察,我们可以将每个状态抽象为1个点,即对于n位密码,我们将。将n位k进制所有的可能都包含进去因此一定能够成果试出密码。首先题目要求能打开保险箱的最短字符串,即将n位所有可能的排列组合都包含进去,例如。的可能组合看作一个点,那么对于。
2023-01-10 10:11:04 304
原创 1806. 还原排列的最少操作步数
对于解法一来说我们枚举了所有位置进行交换,但其实我们不用枚举所有位置。通过分析可以发现,所有的数交换后会构成一个环,每个环经过它长度的交换后就回会到最初的状态,那么我们求出最大的环的长度(从观察可以发现,1或者n-2必然在最长的环中,因此我们模拟1或者n-2进行交换的次数就是最终的答案。),经过在这个长度的交换,所有数必然回到最初的位置。根据题目的题目描述进行模拟,遇到偶数。
2023-01-09 09:31:46 377
原创 1658. 将 x 减到 0 的最小操作数
首先,每次操作可以移除数组 nums 最左边或最右边的元素,那么相当于求出。的情况,若我们的ans最后大于n,那么必然不合法。,并且元素个数最少。我们可以通过双重循环枚举。指针移动的次数都为n,因此整个时间复杂度为。的取值来计算出最小的答案。但其实很多区间是不合法的,比如若。的和已经大于x,那么对于当前的。对于第一次移动来说,先让。通过这种思路,我们使用。之间所有元素之和等于。
2023-01-07 10:04:03 732
原创 2180. 统计各位数字之和为偶数的整数个数
令t = x+ y+z,即除个位数外,前面所有位之和,若t为奇数,则统计奇数个数;令t = num所有数为之和,通过分析可以发现,若t为偶数,答案为。,可以通过前面数字之和的奇偶和最后一位d来进行判断。,由于我们求的是正整数,因此要减去一个0的答案。首先我们从0到num,对于每个数i的所有位之和从。之间的各位数字之和为偶数的正整数的数目,即区间。, 若t为奇数,答案为。
2023-01-06 08:49:29 427
原创 1803. 统计异或值在范围内的数对有多少
对于某个数x = 3,二进制表示“000000000000011”, 我们将该串存入字典树中。例如:给定字符串集合[cab, cos, car, cat], 我们现在需要判断cat是否存在于字符串集合中。之间的数,直接求解不太好求解,我们可以通过容斥原理转化一下,求解。首先对于每个数字,我们可以通过二进制来表示,由于。字典树是一种实现字符串快速检索的多叉树结构。的数都添加进字典树后,我们进行一次查询。, 对于某个j来说,我们将之前。,方便我们后面计算个数。的数存入字典树中,在实现。
2023-01-05 10:01:41 314
原创 1802. 有界数组中指定下标处的最大值
并且两个相邻元素之差的绝对值小于等于1,那么从。,若还有位置能够放置数,则都放置为。, 我们需要判断当前x是否合法。这些数都满足条件,我们需要寻找。位置放置的数最大为多少,假设。,直接循环肯定不行,我们使用。为了使所有元素之和不超过。来寻找满足条件的最大x。对于满足条件的最大的。
2023-01-04 09:21:36 416
原创 Leetcode 2042. 检查句子中的数字是否递增
通过空格分割字符串后,判断当前字符串首字母是否为数字,若是数字,则与之前出现的数字进行比较,初始话之前出现的数字为-1。还可以将字母全部替换掉,直接数字的判断。
2023-01-03 08:47:17 138
原创 Leetcode 1801. 积压订单中的订单总数
遍历每个订单,从对应的堆中寻找是否能够消除,若最后订单还剩余个数,则将该个数加入对应的积压订单中即可。遍历完所有订单,最后从两个堆中取得所有订单的数量便是答案。
2023-01-02 09:17:52 150
原创 Leetcode 2037. 使每位学生都有座位的最少移动次数
通过分析可以发现,交换任意两个学生的匹配位置并不会使得交换次数减少,因此按照每个学生i对于座位i进行求和即可,将两个数组进行排序,然后每个学生。
2022-12-31 11:01:28 214
原创 Leetcode 855. 考场就座
接下来,我们创建一个有序集合来保存已经选了的座位,最开始当集合为空时,必然选择下标为0的座位。若集合不为空,则遍历集合中所有的区间,选择出一个距离最大的中点出来,最后再特判一下选择。在解法一的基础上,我们可以通过优先队列来优化我们区间选择的操作,在解法一我们通过遍历来求的拥有最大距离的区间,再特判一下最左最右端点。的座位已经选择,当我们要在这个区间进行放置的时候,为了使离他最近的人之间的距离达到最大化,我们应该将座位选择在。对于删除操作,当我们删除集合中第一个元素和最后一个元素时,并不会产生新的区间。
2022-12-30 09:09:07 444
原创 Leetcode 1750. 删除字符串两端相同字符后的最短长度
解法一:双指针根据操作直接去除首尾相同的连续字符即可,直到首尾字符不相等或者相交时停止。如果有问题,欢迎评论区交流, 如果有帮助到你,请给题解点个赞和收藏哈~~~
2022-12-28 15:22:04 205
原创 Leetcode 1759. 统计同构子字符串的数目
我们从前往后遍历字符串的每一个字符,统计相同连续字母的子串长度cnt,每次让ans累加长度即可。的相同字母的连续字串,同构字符串的出现次数为。
2022-12-26 08:47:42 156
原创 Leetcode 1754. 构造字典序最大的合并字符串
解法一:字符串模拟将两个字符串进行合并使得字典序最大化,那么直接将两个字符串进行比较,每次取字典序更大的字符串的首字母即可。
2022-12-24 10:59:05 166
原创 Leetcode 1799. N 次操作后的最大分数和
一共有2n个数可以两两配对,n最大为7,因此可以考虑使用二进制位来枚举某个数是否被选取,初始状态位。,便得到答案,保存最大值。单纯地搜索会导致时间超时,因此创建dp数组进行记忆化搜索。开始进行搜索,每次选择两个数进行配对,每次选取两个数的位置为。,我们使用异或运算便可以将对应位置变为0,即。,当某位被选择时,变为0。,直至选取所有数后即。
2022-12-22 10:20:17 387
原创 Leetcode 1760. 袋子里最少数目的球
在写check函数时,如何计算出需要消耗的次数呢。首先对于一个数x若小于等于mid,那么不用划分。若大于x,那么需要进行划分。那么现在我们就可以使用二分查找寻找绿色边界点,便是我们问题的解,即最小的开销。那么可以看出每次的次数为。
2022-12-19 20:48:35 299
原创 Leetcode 1785. 构成特定和需要添加的最少元素
因此能够放置最大的数便放置最大的数,次数为。,我们的目标是使target变为0。,若不能整除则还要多一次。对于添加的数由于必须满足。
2022-12-16 11:02:11 119
原创 Leetcode 1691. 堆叠长方体的最大高度 [Java/C++] 排序+动态规划(附详细证明过程)
我们可以对所有有效的堆叠方式进行排列,那么每个长方体的情况转化为(长,宽,高) = (最小值,中位数,最大值)。, 通过移动第2-第n行的列,构造得到的新堆叠方式也是合法的。我们从第一列开始进行不断的移动,直至所有的3元组。我们直接按照第一个值从小到大进行排序,若相等按照第二个数继续,直至第三个数。我们可以发现,由于我们将最大的值作为高度,那么通过转化后,最终的结果。那么我们可以轻易的抽象出状态集合,类似于最长递增子序列问题。不失一般性,我们将第一行的数构造为。的位置的数变成最大,同理对于。
2022-12-10 08:34:16 693
原创 Leetcode 1780. 判断一个数字是否可以表示成三的幂的和
那么可以转化为3进制。对于每个数来数不同位上要么是0,要么是1,若出现2,那么代表要用两次该幂值。通过取余来判断三进制位是否为2,若为2则不合法。由于要将n表示成若干个。
2022-12-09 08:17:06 178
原创 Leetcode 1812. 判断国际象棋棋盘中一个格子的颜色
解法一:奇偶判断通过对棋盘观察,可以发现黑色和白色的行+列的和必然一个是奇数,一个是偶数,因此直接判断。
2022-12-08 07:52:52 152
原创 Leetcode 1775. 通过最少操作次数使数组的和相等
解法一:贪心 + 计数我们首先应该从正反两个方向去分析,对于不合法的情况:只要两个数组一个全部变成6,一个全部变成1后仍然达不到要求,即变成6的数组和小于变成1的数组和,那么这种情况直接返回-1。 对于合法情况,一定能够使得两个数组的和相等,那么如何让总的操作次数最少呢?我们用sum1sum1sum1和sum2sum2sum2分别代表nums1nums1nums1和nums2nums2nums2的和,这里不妨假设sum1>sum2sum1 > sum2sum1>sum2。那么为了能使得两个数组的和相等
2022-12-07 08:56:13 233
原创 leetcode 1805. 字符串中不同整数的数目
解法一:API直接替换解法二: 模拟使用Set进行种类的去重,若当前字符为数字,那么找到其终止位置后,去除前导0保存在Set中即可。对于数字0,可以转化为保存空字符串。如果有问题,欢迎评论区交流, 如果有帮助到你,请给题解点个赞和收藏哈~~~
2022-12-06 08:52:54 71
原创 Leetcode 1687. 从仓库到码头运输箱子 [四种解法] 动态规划 & 从朴素出发详细剖析优化步骤
解法一: 朴素版本通过题目发现,我们可以很简单的抽象出一个集合状态,dp[i]dp[i]dp[i]即运送前i个箱子需要的最小行程次数,那么怎么进行状态计算呢?我们可以枚举最后一次运送的状态,包括[1,2,3,…maxBoxeds]个箱子,那么枚举运送这些箱子能够产生的最小次数即可。时间复杂度:O(n3)O(n^3)O(n3)空间复杂度:O(n)O(n)O(n)解法二:时间优化我们首先从状态计算的角度去优化:dp[]dp[]dp[]数组右边的所有式子可以看作在一个窗口内,窗口的大小为max
2022-12-05 08:27:13 719
原创 Leetcode 1774. 最接近目标价格的甜点成本
解法一:搜索枚举所有能选的基料,选定一种基料后,搜索所有配料的可能性,每种配料有三种选择:[选1个,选2个,不选][选1个,选2个,不选][选1个,选2个,不选],保存最优的结果即可。解法二:动态规划使用01背包去判断某个体积V是否能够被拼凑,取得与target差距最小且成本最小的一个即可。对于每个基料必须选一个,那么对于大于target的基料就直接判断就可以了,如过小于target,那么就作为dp数组的初始状态。在计算状态时,还要判断一下超过target的值是否是最优答案,最后再遍历一次dp数
2022-12-04 09:01:06 410
原创 Leetcode 1796. 字符串中第二大的数字
解法一:一次遍历直接模拟比较一下。解法二:set去重时间复杂度:O(n)O(n)O(n)空间复杂度:O(1)O(1)O(1)如果有问题,欢迎评论区交流, 如果有帮助到你,请给题解点个赞和收藏哈~~~
2022-12-03 09:04:34 114
原创 Leetcode 1769. 移动所有球到每个盒子所需的最小操作数
在计算答案的时候再计算left前缀和的值。首先计算出解法一中right[1]的结果保存在right中,在计算答案的时候更新left和right即可。右边所有的1移动到该位置花费的步数。对于每个位置将其他小球放置到该位置。后更新cnt继续遍历。移动到位置i需要的步数,定义。中1的个数,那么对于当前。等于左边和右边所有的。
2022-12-02 08:22:22 142
原创 Leetcode 895. 最大频率栈
每个桶可以看作是一个栈,那么每次push就把该数放进对应频率的桶中,出栈时则从最大频率的桶中弹出一个元素即可。这样我们就避免了为不同频率的数来进行排序的操作。,时间为越大代表越靠近栈顶,对于push每次直接统计val值次数增加后将其放入堆中。对于pop方法,每次直接从堆顶弹出一个元素,就是频率最大且靠近栈顶。根据解法一我们知道,我们每次都需要把最高频率的数弹出来,那么除了借用堆进行排序外,我们还可以为。
2022-11-29 23:24:24 285
原创 Leetcode 1758. 生成交替二进制字符串的最少操作数
首先,我们不需要去模拟转化字符的操作,只需要转化一下思维。对于交替字符串最终只可能有。,那么我们只需要将s与这两个字符串进行对比统计最少的不同字符串个数即可。
2022-11-28 22:58:19 164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人