leetcode contest 384
最近周赛比较简单,双周赛难度有所上升,本周最难的题目是 t3
, 其余的题目比较简单。
100230. 修改矩阵
给你一个下标从 0 开始、大小为 m x n
的整数矩阵 matrix
,新建一个下标从 0 开始、名为 answer
的矩阵。使 answer
与 matrix
相等,接着将其中每个值为 -1
的元素替换为所在列的 最大 元素。
返回矩阵 answer
。
示例 1:
输入:matrix = [[1,2,-1],[4,-1,6],[7,8,9]] |
示例 2:
输入:matrix = [[3,-1],[5,2]] |
提示:
m == matrix.length
n == matrix[i].length
2 <= m, n <= 50
-1 <= matrix[i][j] <= 100
- 测试用例中生成的输入满足每列至少包含一个非负整数。
地址
https://leetcode.cn/contest/weekly-contest-384/problems/modify-the-matrix/
题意
直接模拟即可
思路
- 直接模拟即可,用每一列的最大值替换
-1
即可; - 复杂度分析:
- 时间复杂度:$O(n)$,其中 $n$ 表示给定数组的长度。
- 空间复杂度:$O(1)$。
代码
class Solution: |
3036. 匹配模式数组的子数组数目 II
给你一个下标从 0 开始长度为 n
的整数数组 nums
,和一个下标从 0
开始长度为 m
的整数数组 pattern
,pattern
数组只包含整数 -1
,0
和 1
。
大小为 m + 1
的子数组 nums[i..j]
如果对于每个元素 pattern[k]
都满足以下条件,那么我们说这个子数组匹配模式数组 pattern
:
- 如果
pattern[k] == 1
,那么nums[i + k + 1] > nums[i + k]
- 如果
pattern[k] == 0
,那么nums[i + k + 1] == nums[i + k]
- 如果
pattern[k] == -1
,那么nums[i + k + 1] < nums[i + k]
请你返回匹配 pattern
的 nums
子数组的 数目 。
示例 1:
输入:nums = [1,2,3,4,5,6], pattern = [1,1] |
示例 2:
输入:nums = [1,4,4,1,3,5,5,3], pattern = [1,0,-1] |
提示:
2 <= n == nums.length <= 106
1 <= nums[i] <= 109
1 <= m == pattern.length < n
-1 <= pattern[i] <= 1
地址
https://leetcode.cn/contest/weekly-contest-384/problems/number-of-subarrays-that-match-a-pattern-ii/
题意
字符串哈希算法,KMP
思路
- 本题与上周的题目几乎一样的解法,最直接的办法就是字符串哈希
KR
算法或者KMP
, 由于给定的模式只关系到数组中两个相邻的元素,此时我们首先可以将数组转换为模式匹配的目标数,然后在该数组的模式匹配中查找pattern
一共出现多少次即可。经典的解法就是字符串匹配即可,即匹配当前字符串在目标字符串中出现的次数即可,我们可以用KR
算法或者KMP
算法即可。 - 复杂度分析:
- 时间复杂度:$O(n)$, $n$ 表示给定字符串 $s$ 的长度;
- 空间复杂度:$O(n)$;
代码
class Solution: |
100219. 回文字符串的最大数量
给你一个下标从 0 开始的字符串数组 words
,数组的长度为 n
,且包含下标从 0 开始的若干字符串。
你可以执行以下操作 任意 次数(包括零次):
- 选择整数
i
、j
、x
和y
,满足0 <= i, j < n
,0 <= x < words[i].length
,0 <= y < words[j].length
,交换 字符words[i][x]
和words[j][y]
。
返回一个整数,表示在执行一些操作后,words
中可以包含的回文字符串的 最大 数量。
注意:在操作过程中,i
和 j
可以相等。
示例 1:
输入:words = ["abbb","ba","aa"] |
示例 2:
输入:words = ["abc","ab"] |
示例 3:
输入:words = ["cd","ef","a"] |
提示:
1 <= words.length <= 1000
1 <= words[i].length <= 100
words[i]
仅由小写英文字母组成。
地址
https://leetcode.cn/contest/weekly-contest-384/problems/maximum-palindromes-after-operations/
题意
构造题目 + 贪心
思路
- 题目比较有意思,首先我们看到任意两个字符串中的任意两个字符都可以交换,这其实意味着所有字符串中的所有字符都可以任意交换,包括同一个字符串本身的字符也可以任意交换,题目则转换成了给定不同字符的数目,最多可以构造指定长度的字符串的数目最多为多少。
- 根据 $1$ 的分析我们可以贪心的来构造,首先我们可以知道对于长度为奇数的回文字符串,它最中间的字母可以填任意元素,此时我们只需要计算它的两边需要的成对的字符的数目即可,因此首先我们统计所有出现次数为偶数的字符的数目,然后我们贪心的从字符串长度从小到大开始构造,出现次数为偶数的总数为 $tot$
- 首先构造长度最小的字符串,此时我们从 $tot$ 中减去需要构造的最长偶数对数;
- 然后构造长度较长的字符串,此时我们还是依次构造,直到 $tot$ 小于 $0$ 为止,此时则无法构造。
- 复杂度分析:
- 时间复杂度:$O(n\log n + |\Sigma|)$,其中 $n$ 表示给定字符串数组的长度, $|\Sigma|$ 表示字符集的大小。
- 空间复杂度:$O(|\Sigma|)$, $|\Sigma|$ 表示字符集的大小。
代码
class Solution: |
欢迎关注和打赏,感谢支持!
扫描二维码,分享此文章