算法

LeetCode1007. 行相等的最少多米诺旋转

2021-08-30  本文已影响0人  Timmy_zzh
1.题目描述
输入:A = [2,1,2,4,2,2], B = [5,2,6,2,3,2]
输出:2
解释:
图一表示:在我们旋转之前, A 和 B 给出的多米诺牌。
如果我们旋转第二个和第四个多米诺骨牌,我们可以使上面一行中的每个值都等于 2,如图二所示。

示例 2:
输入:A = [3,5,1,2,3], B = [3,6,3,3,4]
输出:-1
解释:
在这种情况下,不可能旋转多米诺牌使一行的值相等。
 
提示:
1 <= A[i], B[i] <= 6
2 <= A.length == B.length <= 20000
2.解题思路:
    public int minDominoRotations(int[] tops, int[] bottoms) {
        int rotate1 = rotate(tops[0], tops, bottoms);
        if (rotate1 != -1 || tops[0] == bottoms[0]) {
            return rotate1;
        } else {
            return rotate(bottoms[0], tops, bottoms);
        }
    }

    private int rotate(int num, int[] tops, int[] bottoms) {
        int rotateA = 0;
        int rotateB = 0;
        int n = tops.length;

        for (int i = 0; i < n; i++) {
            //两个都不等于num,直接返回-1
            if (tops[i] != num && bottoms[i] != num) {
                return -1;
            }
            if (tops[i] != num && bottoms[i] == num) {
                rotateA++;
            } else if (tops[i] == num && bottoms[i] != num) {
                rotateB++;
            }
        }
        return Math.min(rotateA, rotateB);
    }

3.总结
上一篇下一篇

猜你喜欢

热点阅读