LeetCode weekly contest 158
1221. Split a String in Balanced Strings
理解balanced的定义,发现只需要找到 L 和 R 出现个数相等的位置即可。
Time complexity: O(N),
Space complexity: O(1).
1 | impl Solution { |
1222. Queens That Can Attack the King
虽然理解题目稍微复杂些,但算法其实很直接,从King往外找,而不是从queue开始找。
时间复杂度: O(queens.len() + chessboard.len()),
空间复杂度: O(queens.len()).
1 | pub fn queens_attackthe_king(queens: Vec<Vec<i32>>, king: Vec<i32>) -> Vec<Vec<i32>> { |
1223. Dice Roll Simulation
有memoization的dfs。
通过分析memo的最多可能,可知
时间复杂度: O(6 * N ^ 2),
空间复杂度: O(6 * N ^ 2).
1 | use std::collections::HashMap; |
1224. Maximum Equal Frequency
首先明确 an array prefix of nums
的意义,即前缀数组。
再看到加粗的exactly one
,可知符合要求的前缀数组有2种情况:
- 出现次数最多的数的数目 - 1 = 所有其他数的出现次数的数目
- 有一个数出现次数为 1,其他数出现的次数相同
最后看数据规模10^5
,基本上可以确定必须要O(N * log N) 或 O(N)
的算法了。
算法其实已经呼之欲出了,很自然地想到用 散列表 记录不同数的出现次数,用 TreeSet对出现次数进行存储,可以快速更新出现次数。然后One Pass即可。
时间复杂度: O(N log N),
空间复杂度: O(N).
1 | class Solution { |