leetcode weekly contes 343
题目出的不太好,T3 这个题目出的确实不咋的,虽然没做出来,但是感觉这个题目出的确实不咋的。

2660. 保龄球游戏的获胜者
给你两个下标从 0 开始的整数数组 player1 和 player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。
保龄球比赛由 n 轮组成,每轮的瓶数恰好为 10 。
假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为:
- 如果玩家在前两轮中击中了
10个瓶子,则为2xi。 - 否则,为
xi。
玩家的得分是其 n 轮价值的总和。
返回
- 如果玩家 1 的得分高于玩家 2 的得分,则为
1; - 如果玩家 2 的得分高于玩家 1 的得分,则为
2; - 如果平局,则为
0。
示例 1:
输入:player1 = [4,10,7,9], player2 = [6,5,2,3] |
示例 2:
输入:player1 = [3,5,7,6], player2 = [8,10,10,2] |
示例 3:
输入:player1 = [2,3], player2 = [4,1] |
提示:
n == player1.length == player2.length1 <= n <= 10000 <= player1[i], player2[i] <= 10
地址
https://leetcode.cn/contest/weekly-contest-343/problems/determine-the-winner-of-a-bowling-game/
题意
直接模拟
思路
- 题目翻译的有问题,应该是前两轮的任意一轮得10分即当前轮的得分翻倍,我们直接模拟即可,判断当前轮的前两轮是否有 10 即可。
- 复杂度分析:
- 时间复杂度:$O(n)$。
- 空间复杂度:$O(1)$。
代码
class Solution { |
2661. 找出叠涂元素
给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1,m * n] 内的 所有 整数。
从下标 0 开始遍历 arr 中的每个下标 i ,并将包含整数 arr[i] 的 mat 单元格涂色。
请你找出 arr 中在 mat 的某一行或某一列上都被涂色且下标最小的元素,并返回其下标 i 。
示例 1:

输入:arr = [1,3,4,2], mat = [[1,4],[2,3]] |
示例 2:

输入:arr = [2,8,7,4,1,3,5,6,9], mat = [[3,2,5],[1,4,6],[8,7,9]] |
提示:
m == mat.lengthn = mat[i].lengtharr.length == m * n1 <= m, n <= 1051 <= m * n <= 1051 <= arr[i], mat[r][c] <= m * narr中的所有整数 互不相同mat中的所有整数 互不相同
地址
https://leetcode.cn/contest/weekly-contest-343/problems/first-completely-painted-row-or-column/
题意
模拟
思路
- 由于题目中每个元素均不相同,此时我们直接记录每个元素在矩阵中出现的位置 $(x,y)$,每次遍历当前元素 $arr[i]$ 时,我们将其所在的行 $r$ 中的元素数目减 $1$,将其所在的列 $r$ 中的元素数目减 $1$,如果当前行的数目或者列的数目变为 $0$,则返回当前的索引 $i$ 即可。
- 复杂度分析:
- 时间复杂度:$O(mn)$,其中 $m,n$ 为矩阵的行数与列数。
- 空间复杂度:$O(mn)$,其中 $m,n$ 为矩阵的行数与列数。
代码
class Solution { |
2662. 前往目标的最小代价
给你一个数组 start ,其中 start = [startX, startY] 表示你的初始位置位于二维空间上的 (startX, startY) 。另给你一个数组 target ,其中 target = [targetX, targetY] 表示你的目标位置 (targetX, targetY) 。
从位置 (x1, y1) 到空间中任一其他位置 (x2, y2) 的代价是 |x2 - x1| + |y2 - y1| 。
给你一个二维数组 specialRoads ,表示空间中存在的一些特殊路径。其中 specialRoads[i] = [x1i, y1i, x2i, y2i, costi] 表示第 i 条特殊路径可以从 (x1i, y1i) 到 (x2i, y2i) ,但成本等于 costi 。你可以使用每条特殊路径任意次数。
返回从 (startX, startY) 到 (targetX, targetY) 所需的最小代价。
示例 1:
输入:start = [1,1], target = [4,5], specialRoads = [[1,2,3,3,2],[3,4,4,5,1]] |
示例 2:
输入:start = [3,2], target = [5,7], specialRoads = [[3,2,3,4,4],[3,3,5,5,5],[3,4,5,6,6]] |
提示:
start.length == target.length == 21 <= startX <= targetX <= 1051 <= startY <= targetY <= 1051 <= specialRoads.length <= 200specialRoads[i].length == 5startX <= x1i, x2i <= targetXstartY <= y1i, y2i <= targetY1 <= costi <= 105
地址
https://leetcode.cn/contest/weekly-contest-343/problems/minimum-cost-of-a-path-with-special-roads/
题意
dijistra
思路
- 题目感觉出的不太好,不过解题方法还是比较简单,我们将题目中给定的 $specialRoads$ 中给定的特殊路径看做为特使的有向边 $\overrightarrow{pq}$,其中 $\overrightarrow{pq}$ 的边长为 $specialRoads[i][4]$,我们建立一个完全图,从起点 $start$ 指向所有的端点的有向边,从每个有向边的终点指向所有的所有有向边的起点,建立一个完全图,然后利用含有堆的 $dijistra$ 算法求起点到终点的最短路径即可。
- 复杂度分析:
- 时间复杂度:$O(n^2 \log n)$,其中 $n$ 为给定的特殊路径的数目。
- 空间复杂度:$O(n^2)$,其中 $n$ 为给定的特殊路径的数目。
代码
class Solution { |
2663. 字典序最小的美丽字符串
如果一个字符串满足以下条件,则称其为 美丽字符串 :
- 它由英语小写字母表的前
k个字母组成。 - 它不包含任何长度为
2或更长的回文子字符串。
给你一个长度为 n 的美丽字符串 s 和一个正整数 k 。
请你找出并返回一个长度为 n 的美丽字符串,该字符串还满足:在字典序大于 s 的所有美丽字符串中字典序最小。如果不存在这样的字符串,则返回一个空字符串。
对于长度相同的两个字符串 a 和 b ,如果字符串 a 在与字符串 b 不同的第一个位置上的字符字典序更大,则字符串 a 的字典序大于字符串 b 。
- 例如,
"abcd"的字典序比"abcc"更大,因为在不同的第一个位置(第四个字符)上d的字典序大于c。
示例 1:
输入:s = "abcz", k = 26 |
示例 2:
输入:s = "dc", k = 4 |
提示:
1 <= n == s.length <= 1054 <= k <= 26s是一个美丽字符串
地址
https://leetcode.cn/contest/weekly-contest-343/problems/lexicographically-smallest-beautiful-string/
题意
贪心模拟
思路
题目看似很难,实际仔细分析一下就可以看到非常简单,我们仔细分析一下可以看到一下几点:
由于美丽字符的定义可以知道 $s[i] \neq s[i - 1], s[i] \neq s[i - 2]$;
组成长度大于 $3$ 的美丽字符串最少需要 $3$ 个字符即可,实际我们只用 $a,b,c$ 三个字符即可组成字典序最小的美丽字符串;
由于题目要求求出大于当前字符串的且字典序最小的字符串,此时根据最小字符串的定义,我们尝试从 $n-1$ 个字符依次向前遍历,并将当前的字符 $s[i]$ 替换为比当前字符 $s[i]$ 大的字符且比小于等于最大字符的字符 $a$,
- 此时 $a \in [s[i] + 1, \texttt{`a’} + k - 1]$ ,假设 当前 $s[i]$ 进行了替换,且满足 $a \neq s[i-1], a \neq s[i - 2]$;
- 此时我们还需要尝试填充最小的 $s[i + 1]$,假设当前填充的字符为 $b$,此时 $b \in [\texttt{
a'}, \texttt{a’} + k - 1]$,此时 $b \neq a, b \neq s[i-1]$; - 如果我们找到合适的 $a,b$ 进行填充 后,此时我们还需要用最小的字典序填充 $s[i+2, \cdots, n - 1]$, 此时根据上述的描述剩余的字符我们直接用最小的三个字符 $\texttt{
a',b’,`c’}$ 依次填充即可,但是此时仍然需要满足 $s[j] \neq s[j - 1], s[j] \neq s[j - 2]$; - 为什么 $s[i], s[i + 1]$ 不能直接用 $\texttt{
a',b’,`c’}$ 填充,这是因为此时的填充关系与 $s[i -1], s[i-2]$ 有关;
复杂度分析:
- 时间复杂度:$O(n\times k^2)$,其中 $n$ 为字符串的长度, $k$ 为给定的数字;
- 空间复杂度:$O(n)$,其中 $n$ 为字符串的长度;
代码
class Solution { |
欢迎关注和打赏,感谢支持!
- 关注我的博客: http://whistle-wind.com/
- 关注我的知乎:https://www.zhihu.com/people/da-hua-niu
- 关注我的微信公众号: 公务程序猿

扫描二维码,分享此文章