leetcode contest biweekly 81
虽然是手速题,结果写完了,发现已经掉到 200 名了,真心太菜了。
6104. 统计星号
题目
给你一个字符串 s ,每 两个 连续竖线 '|' 为 一对 。换言之,第一个和第二个 '|' 为一对,第三个和第四个 '|' 为一对,以此类推。
请你返回 不在 竖线对之间,s 中 '*' 的数目。
注意,每个竖线 '|' 都会 恰好 属于一个对。
示例 1:
输入:s = "l|*e*et|c**o|*de|" |
示例 2:
输入:s = "iamprogrammer" |
示例 3:
输入:s = "yo|uar|e**|b|e***au|tifu|l" |
提示:
1 <= s.length <= 1000s只包含小写英文字母,竖线'|'和星号'*'。s包含 偶数 个竖线'|'。
提示:
1 <= s.length <= 1000s由小写和大写英文字母组成
地址
https://leetcode.cn/contest/biweekly-contest-81/problems/count-asterisks/
题意
直接遍历
思路
- 题目出的比较稀烂,反正暴力即可,先将相邻的
|之间的*全部去掉,然后再统计字符串中的*即可。 - 复杂度分析:
- 时间复杂度:$O(n)$, 其中 $n$ 为字符串的长度。
- 空间复杂度:$O(n)$,其中 $n$ 为字符串的长度。
代码
class Solution { |
6106. 统计无向图中无法互相到达点对数
题目
给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点ai和 bi 之间有一条 无向 边。
请你返回 无法互相到达 的不同 点对数目 。
示例 1:
输入:n = 3, edges = [[0,1],[0,2],[1,2]] |
示例 2:
输入:n = 7, edges = [[0,2],[0,5],[2,4],[1,6],[5,4]] |
提示:
1 <= n <= 1050 <= edges.length <= 2 * 105edges[i].length == 20 <= ai, bi < nai != bi- 不会有重复边。
地址
题意
BFS
思路
- 典型的图的问题,首先求图中的所有连通区域的数目,我们可以用简单的
BFS或者UNION均可,求出所有的联通区域包含节点的个数的数组为 $arr$,设联通区域的数目为 $n$ 个。则根据组合数组中的抽样定理可以知道,所有可能的点对的数目为:
$$
tot = \sum_{i=0}^{n}(arr[i] \times \sum_{j=0}^{i-1}arr[j])
$$ - 复杂度分析:
- 时间复杂度:$O(n)$,其中 $n$ 为节点的数目。
- 空间复杂度:$O(n)$,其中 $n$ 为节点的数目。
代码
class Solution { |
6105. 操作后的最大异或和
题目
给你一个下标从 0 开始的整数数组 nums 。一次操作中,选择 任意 非负整数 x 和一个下标 i ,更新 nums[i] 为 nums[i] AND (nums[i] XOR x) 。
注意,AND 是逐位与运算,XOR 是逐位异或运算。
请你执行 任意次 更新操作,并返回 nums 中所有元素 最大 逐位异或和。
示例 1:
输入:nums = [3,2,4,6] |
示例 2:
输入:nums = [1,2,3,9,2] |
提示:
1 <= nums.length <= 1050 <= nums[i] <= 108
地址
https://leetcode.cn/contest/biweekly-contest-81/problems/maximum-xor-after-operations/
题意
数学问题,贪心算法
思路
- 简单的数学问题,由于题目中明确说了
x可以为任意值,这就很好办,nums[i] XOR x可以变为任何值,nums[i] AND (nums[i] XOR x)则表明我们可以保留nums[i]中数位为1的任何一位,因此我们统计数组中所有的数中数位出为1出现的个数,只要是某个数位上存在某个元素该数位为1则我们一定可以将其保留,问题最终转变为统计所有的数位即可,然后将所有出现过的数位全部置为1即可得到最大值。 - 复杂度分析:
- 时间复杂度:$O(C \times n)$, $n$ 表示数组的数目。
- 空间复杂度:$O(C)$,$C$ 表示数位的数目。
代码
class Solution { |
6107. 不同骰子序列的数目
题目
给你一个整数 n 。你需要掷一个 6 面的骰子 n 次。请你在满足以下要求的前提下,求出 不同 骰子序列的数目:
- 序列中任意 相邻 数字的 最大公约数 为
1。
序列中 相等 的值之间,至少有2个其他值的数字。正式地,如果第i次掷骰子的值 等于 第j次的值,那么 abs(i-j) > 2 。
请你返回不同序列的 总数目 。由于答案可能很大,请你将答案对109 + 7取余 后返回。
如果两个序列中至少有一个元素不同,那么它们被视为不同的序列。
示例 1:
输入:n = 4 |
示例 2:
输入:n = 2 |
提示:
1 <= n <= 104
地址
https://leetcode.cn/contest/biweekly-contest-81/problems/number-of-distinct-roll-sequences/
题意
动态规划
思路
- 典型的动态规划,我们设 $dp[i][j][k]$ 表示抛掷骰子 $i$ 次且倒数第一次和第二次的数字为 $j,k$ 的序列数目,则可以知道如下递推公式:
$$
dp[i][j][k] = \sum_{p=1}^{6}dp[i-1][k][p] \qquad(j \neq k, k \neq p, j \neq p, \gcd(j,k) = 1, \gcd(k,p) = 1)
$$
按照上述的递推公式即可得到所有可能的组合,需要对过程变量和最终结果取模即可。 - 复杂度分析:
- 时间复杂度:$n \times C^3 $, $n$ 表示抛掷次数, $C = 6$ 为骰子的取值范围。
- 空间复杂度:$n \times C^2$, $n$ 表示抛掷次数,$C = 6$ 为骰子的取值范围。
代码
class Solution { |
欢迎关注和打赏,感谢支持!
- 关注我的博客: http://mikemeng.org/
- 关注我的知乎:https://www.zhihu.com/people/da-hua-niu
- 关注我的微信公众号: 公务程序猿

扫描二维码,分享此文章