Ekvivalent Domino Cütlüyünün Leetcode Həlli Sayı

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon
alqoritmlər Geyim kodlaşdırma müsahibə müsahibə hazırlığı LeetCode LeetCodeSolutionsBaxılıb 26

Problem bəyanat

“Ekvivalent Domino cütlərinin sayı” problemində bizə hər dominonun domino kimi iki dəyərdən ibarət olduğu domino siyahısı verilmişdir [i] = [a, b]. İki domino, domino [i] = [a, b] və domino [j] = [c, d] bərabərdir (a == c və b == d) və ya (a == d və c == d) .

Ekvivalent Domino Cütlüyünün Leetcode Həlli SayıPin

Bizim vəzifəmiz i! = J və domino [i] olduğu cütlüklərin (i, j) ümumi sayını tapmaqdır. ekvivalent dominolara [j]. A və b-nin verilmiş dəyərləri [1,9] aralığındadır.

misal

dominoes = [[1,2],[2,1],[3,4],[5,6]]
1

Explanation: Bu nümunədə domino [0] dominoya [1] bərabərdir, çünki şərti təmin edir (a == d və c == d). Bu, ekvivalent domino meyarlarını təmin edən yeganə cütlük olduğundan cavab birdir.

Ekvivalent Domino Cütlüyünün Leetcode Həlli Sayı üçün yanaşma

Bu problemi domino seçib qalan bütün dominoların seçilmiş dominoya bərabər olub olmadığını yoxlayaraq həll edə bilərik. bunu bütün dominolar üçün edəcəyik və sonra ekvivalent domino sayını 2-yə bölərək cavab verəcəyik. Ancaq bu yanaşma üçün zaman mürəkkəbliyi O (n * n) olacaqdır. Aşağıdakı addımlara əməl edərək bu problemi O (n) vaxtında həll edə bilərik:

  1. İki ədədi (a, b) tək bir ədədə çevirəcəyik, bu bərabərliyin yoxlanmasını asanlaşdıracaq.
  2. Bu hash funksiyası iki ədədi c = min (a, b) * 10 + max (a, b) bir ədədə çevirəcəkdir.
  3. İndi hər bir rəqəmin tezliyini saymaq üçün bir hash cədvəli yaradacağıq.
  4. Dominolar dizisini keçəcəyik və c tezliyini hash cədvəlində saxlayacağıq.
  5. C dəyərlərinin tezliyini hesabladıqdan sonra ekvivalent domino sayını hesablaya bilərik. Tutaq ki, x rəqəminin hash cədvəlində f tezliyi var, onda x dəyəri üçün ekvivalent cütlərin sayı (f * (f-2)) / 1 olan fC2 olacaqdır.
  6. Qarışıq cədvəlindən keçəcəyik və hash masasındakı hər girişin ekvivalent domino sayını cəmləyərək ekvivalent domino sayını hesablayacağıq.

Həyata keçirilməsi

Ekvivalent Domino Cütlüyünün C ++ kodu

#include <bits/stdc++.h> 
using namespace std; 
    int numEquivDominoPairs(vector<vector<int>>& dominoes) {
        unordered_map<int, int> count;
        int res = 0;
        for (auto& d : dominoes) {
           count[min(d[0], d[1]) * 10 + max(d[0], d[1])]++;
        }
         for (auto const& pair: count)
         {
          int v= pair.second; 
          res += v * (v - 1) / 2;
         }

        return res;
    }

int main() 
{ 
    vector<vector<int>> dominoes
    {
        {1,2},
        {2,1},
        {3,4},
        {5,6}
    };
int ans=numEquivDominoPairs(dominoes); 
 cout<<ans<<endl;
 return 0;
}
1

Ekvivalent Domino cütlərinin sayı üçün Java kodu

import java.util.Arrays;
import java.util.Set ;
import java.util.HashSet;
import java.util.*; 
public class Tutorialcup {
    public static int numEquivDominoPairs(int[][] dominoes) {
        Map<Integer, Integer> count = new HashMap<>();
        int res = 0;
        for (int[] d : dominoes) {
            int k = Math.min(d[0], d[1]) * 10 + Math.max(d[0], d[1]);
            count.put(k, count.getOrDefault(k, 0) + 1);
        }
        for (int v : count.values()) {
            res += v * (v - 1) / 2;
        }
        return res;
    }
  public static void main(String[] args) {
        int[][] dominoes=
    {
        {1,2},
        {2,1},
        {3,4},
        {5,6}
    };
        int ans=numEquivDominoPairs(dominoes); 
        System.out.println(ans);
  }
}
1

Ekvivalent Domino Cütlüyünün Mürəkkəblik Analizi Leetcode Solution

Zaman mürəkkəbliyi

Yuxarıdakı kodun zaman mürəkkəbliyi O (n) çünki domino dizisini yalnız bir dəfə dolaşırıq. Burada n dominolar massivinin uzunluğudur.

Kosmik mürəkkəblik

Yuxarıdakı kodun kosmik mürəkkəbliyi O (n) çünki bir hash masa yaradırıq.

References

Şərh yaz

Translate »
1