LeetCode 1007. Minimale Domino-Rotation mit gleichen Reihen

Artikelverzeichnis

1. Titel

In einer Reihe von Dominosteinen repräsentieren A [i] und B [i] die obere bzw. untere Hälfte des i-ten Dominosteins. (Ein Domino wird gebildet, indem zwei Zahlen von 1 bis 6 in derselben Spalte gekachelt werden. Auf jeder Hälfte der Kachel befindet sich eine Zahl.)

Wir können den i-ten Domino drehen, so dass die Werte von A [i] und B [i] vertauscht werden.

Kann alle Werte von A oder B zurückgeben, alle Werte haben die gleiche Mindestanzahl von Umdrehungen .

Wenn dies nicht möglich ist, geben Sie -1 zurück.

Beispiel 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

Quelle: LeetCode (LeetCode)
Link: https://leetcode-cn.com/problems/minimum-domino-rotations-for-equal-row Das
Copyright liegt bei LeetCode . Für kommerzielle Nachdrucke wenden Sie sich bitte an die offizielle Genehmigung. Für nichtkommerzielle Nachdrucke geben Sie bitte die Quelle an.

2. Problemlösung

  • Suchen Sie die Zahl x, wobei die Zahl> = n ist
  • Überprüfen Sie die beiden Zahlen an jeder Position:
  1. Alle gleich x, keine Änderung erforderlich, Aufnahmezeiten r2
  2. Nicht gleich x, was die Bedeutung der Frage nicht erfüllt
  3. Eins ist gleich x, und die
    Antwort zum Aufzeichnen der Anzahl der Umdrehungen r1 ist min ⁡ (r 1, n - r 2 - r 1) \ min (r1, n - r2 - r1)min ( r 1 ,n- -r 2- -r 1 )
class Solution {
    
    
public:
    int minDominoRotations(vector<int>& A, vector<int>& B) {
    
    
        int n = A.size();
        vector<int> count(7, 0);
        for(int i = 0; i < n; i++) 
        {
    
    
            count[A[i]]++;//计数
            count[B[i]]++;
        }
        int num = -1;
        for(int i = 1; i <= 6; ++i)
        {
    
    
            if(count[i] >= n)//个数达标的数
                num = i;
        }
        if(num == -1)
            return -1;
        int rotation = 0, notrotation = 0;
        for(int i = 0; i < n; ++i)
        {
    
    
            if(A[i] == num && B[i] == num)
                notrotation++;//两个都是,不需要交换
            else if(A[i] != num && B[i] != num)
                return -1;//都不等,不存在
            else if(A[i] == num)
                rotation++;
        }
        return min(rotation, n-notrotation-rotation);
    }
};

304 ms 100,7 MB


Meine CSDN- Blog-Adresse https://michael.blog.csdn.net/

Drücken oder scannen Sie lange den QR-Code, um meinem offiziellen Konto (Michael Amin) zu folgen, zusammen zu kommen, zu lernen und gemeinsam Fortschritte zu machen!
Michael Amin

Ich denke du magst

Origin blog.csdn.net/qq_21201267/article/details/108897096
Empfohlen
Rangfolge