# 第 275 场周赛题解
# Q1 2133. 检查是否每一行每一列都包含全部整数 (opens new window)
模拟。
class SolutionA {
fun checkValid(matrix: Array<IntArray>): Boolean {
val n = matrix.size
for (i in 0 until n) {
val a = HashSet<Int>()
val b = HashSet<Int>()
for (j in 0 until n) {
a.add(matrix[i][j])
b.add(matrix[j][i])
}
if (a.size != n || b.size != n) return false
}
return true
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Q2 2134. 最少交换次数来组合所有的 1 II (opens new window)
滑动窗口,由于有首尾相连,可以直接将两个原数组拼接起来。窗口大小使用1的数量,然后看覆盖最多1的窗口即可。
class SolutionB {
fun minSwaps(nums: IntArray): Int {
val c = nums.count { it == 1 }
val arr = ArrayList<Int>()
arr.addAll(nums.toTypedArray())
arr.addAll(nums.toTypedArray())
var cur = 0
var ans = 0
for (i in arr.indices) {
cur += arr[i]
if (i >= c) {
cur -= arr[i - c]
}
ans = maxOf(ans, cur)
}
return c - ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Q3 5978. 统计追加字母可以获得的单词数 (opens new window)
每个字母只能出现一次,直接用Set处理排序后的字符串。遍历删除一位是否在Set中即可。
class SolutionC {
fun wordCount(startWords: Array<String>, targetWords: Array<String>): Int {
val arr = Array<HashSet<String>>(28) { HashSet() }
startWords.forEach {
val n = it.length
arr[n].add(it.toSortedSet().joinToString(""))
}
var ans = 0
targetWords.forEach {
val n = it.length - 1
val sorted = it.toSortedSet().joinToString("")
if ((0..n).any {
val sb = sorted.substring(0, it) + sorted.substring(it + 1, n + 1)
sb in arr[n]
}) ans++
}
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Q4 5979. 全部开花的最早一天 (opens new window)
垃圾题目,写错成,掉大分了。
class SolutionD {
fun earliestFullBloom(plantTime: IntArray, growTime: IntArray): Int {
val arr = ArrayList<Pair<Int, Int>>()
for (i in plantTime.indices) {
arr.add(Pair(plantTime[i], growTime[i]))
}
arr.sortBy { -it.second }
var day = 0
var ans = 0
for (i in arr.indices) {
day += arr[i].first
ans = maxOf(ans, day + arr[i].second)
}
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16