题目:
在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。)
我们可以旋转第 i 张多米诺,使得 A[i] 和 B[i] 的值交换。
返回能使 A 中所有值或者 B 中所有值都相同的最小旋转次数。
如果无法做到,返回 -1.
算法:
方法一:不知道叫啥
func minDominoRotations(A []int, B []int) int {
// 因为数字取值范围[1,6],用nums保存A,B中每个数字出现的次数
nums := [7]int{}
// 保存A中每个数字出现的次数
as := [7]int{}
// 保存B中每个数字出现的次数
bs := [7]int{}
for i := 0; i < len(A); i ++ {
if A[i] == B[i] {
nums[A[i]] ++
} else {
nums[A[i]] ++
nums[B[i]] ++
as[A[i]] ++
bs[B[i]] ++
}
}
for i, v := range nums {
// 有一个数i在每一个位置都出现了,不可能再有第二个
// 假设在A出现了2次,在B出现了4次,则翻转2次即可
if v == len(A) {
return min(as[i], bs[i])
}
}
return -1
}
func min(x, y int) int {
if x < y {
return x
}
return y
}