Bir cüt cüt verilmiş İçindəki bütün Simmetrik cütləri tapın

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Amazon Capgemini Cisco Pulsuz yükləmə Moonfrog Laboratoriyaları Opera Xome
Geyim SükutBaxılıb 30

Bütün simmetrik cütləri tapın - Sizə bir cüt cüt verilir array. İçindəki simmetrik cütləri tapmalısan. Simetrik cütün cütlüyündə (a, b) və (c, d) dedikdə simmetrik olduğu deyilir, burada 'b' nin 'c' -ə, 'a' -ın 'd' -ə bərabər olduğu, (1 , 2) simmetrik cütdür (2, 1).

misal

Bir cüt cüt verilmiş İçindəki bütün Simmetrik cütləri tapınPin

{{11, 20},{30,40},{4,5},{5,4},{40,30}}
(4, 5) (30, 40)

Bütün simmetrik cütləri tapmaq üçün alqoritm

  1. Bəyan edin a HashMap.
  2. Isə mən <n (sıra uzunluğu)
    1. Set ilk dəyər massiv [i] [0] və ikinci dəyər arr [i] [1].
    2. SecondValue dəyərinin sıfır olmadığını və secondValue dəyərinin firstValue-a bərabər olub olmadığını yoxlayın
    3. Doğrudursa, onda SecondValue və firstValue yazdırın.
    4. Başqa birincisi Dəyər və ikinci Dəyərləri Hashmap-ə daxil etdi.
  3. Prosesi a-dan d-ə qədər döngü mövcud olana qədər təkrarlayın.

Izahat

Bir sıra cütləri verdik, bu sıra içərisində bəzi simmetrik cütlər mövcuddur. Problem ifadəsi bir sıra içərisində olan bütün simmetrik cütləri tapmalı olduğumuzu söyləyir. Sadəcə olaraq iki döngədən istifadə edə bilərik və hər iki massivi tək-tək gəzə bilərik. Ancaq bu, bizə daha çox vaxt mürəkkəbliyinə başa gəlir və səmərəli bir kod əldə edə bilmirik. Daha sonra onları əvvəlcə müəyyən bir sıraya görə çeşidləmək üçün daha yaxşı bir yanaşma tətbiq etməyə çalışırıq, eyni zamanda səmərəliliyimizi tələb edir. Beləliklə, səmərəli bir proqram əldə etmək üçün qarışıqdan istifadə etməliyik.

Bir hashmap istifadə edərək, əvvəlcə cütün ilk elementini saxlayırıq ilk dəyər və cütlüyün ikinci elementi ikinci dəyər, bir cüt elementinin hər ikisini açar və dəyər olaraq istifadə edə bilərik. Bir cütün açarını başqa bir cütün dəyəri ilə eyni cütün dəyərini başqa cütün açarı ilə müqayisə edərək xəritədə axtaracağıq.

Bir hashmap istifadə edəcəyik, bir sıra cütlər üçün bir nümunə nəzərdən keçirək, içindəki bütün simmetrik cütləri tapın

misal

arr={{1, 2},{30,40},{6,9},{2,1},{9,6}}

Dizinin cüt dəyərlərini firstValue və secondValue olaraq saxlayacağıq, sonra yoxlayacağıq.

i = 0,

firstValue = arr [i] [0] // cütlük 1-ci element

secondValue = arr [i] [1] // cütlük 2-ci element

birinci Dəyər = 1, ikinci Dəyər = 2

Xəritədə bir dəyəri varsa 1-i yoxlayacağıq və şərti səhvdir, buna görə hər iki dəyəri xəritəyə qoyuruq.

Xəritə = [{1: 2}]

i = 1,

firstValue = arr [i] [0] // cütlük 1-ci element

secondValue = arr [i] [1] // cütlük 2-ci element

birinci Dəyər = 30, ikinci Dəyər = 40

Xəritədə bir dəyəri varsa 30-i yoxlayacağıq və şərti səhvdir, buna görə hər iki dəyəri xəritəyə qoyuruq.

Xəritə = [{1: 2}, {30:40}]

i = 2,

firstValue = arr [i] [0] // cütlük 1-ci element

secondValue = arr [i] [1] // cütlük 2-ci element

birinci Dəyər = 6, ikinci Dəyər = 9

Xəritədə bir dəyəri varsa 6-i yoxlayacağıq və şərti səhvdir, buna görə hər iki dəyəri xəritəyə qoyuruq.

Map=[{1:2},{30:40},{6:9}]

i = 3,

firstValue = arr [i] [0] // cütlük 1-ci element

secondValue = arr [i] [1] // cütlük 2-ci element

birinci Dəyər = 2, ikinci Dəyər = 1

Bir xəritədə dəyəri varsa və '1' kimi mövcuddursa 2-i yoxlayacağıq, əgər SecondValue elementinin firstValue-a bərabər olub olmadığını və bu şərtin yerinə yetirildiyini yoxlayacağıq.

Beləliklə çap edirik (1, 2)

Map=[{1:2},{30:40},{6:9}]

i = 4,

firstValue = arr [i] [0] // cütlük 1-ci element

secondValue = arr [i] [1] // cütlük 2-ci element

birinci Dəyər = 9, ikinci Dəyər = 6

Bir xəritədə dəyəri varsa və '6' kimi mövcuddursa, 9-nı yoxlayacağıq, onda SecondValue elementinin firstValue-a bərabər olub olmadığını və bu şərtin də təmin olunduğunu yoxlayacağıq.

Beləliklə (1, 2), (6, 9) yazdırırıq

Map=[{1:2},{30:40},{6:9}]

Kodu

Bütün simmetrik cütləri tapmaq üçün C ++ proqramı

#include<unordered_map>
#include<iostream>
using namespace std;
void getSymmetricPair(int arr[][2], int row)
{
    unordered_map<int, int> myMap;

    for (int i = 0; i < row; i++)
    {
        int firstValue = arr[i][0];
        int secondValue = arr[i][1];

        if (myMap.find(secondValue) != myMap.end() && myMap[secondValue] == firstValue)
        {
            cout << "(" << secondValue << ", " << firstValue << ")"<<" ";
        }
        else
        {
            myMap[firstValue] = secondValue;
        }
    }
}
int main()
{
    int arr[5][2]= {{11,20},{30,40},{4,5},{5,4},{40,30}};
    getSymmetricPair(arr, 5);
}
(4, 5) (30, 40)

Bütün simmetrik cütləri tapmaq üçün Java proqramı

import java.util.HashMap;
class pairSymmetrics
{
    static void getSymmetricPair(int arr[][])
    {
        HashMap<Integer, Integer> hashmap = new HashMap<Integer, Integer>();

        for (int i = 0; i < arr.length; i++)
        {
            int firstValue = arr[i][0];
            int secondValue = arr[i][1];
            Integer val = hashmap.get(secondValue);

            if (val != null && val == firstValue)
            {
                System.out.print("(" + secondValue + ", " + firstValue + ")" + " ");
            }
            else
            {
                hashmap.put(firstValue, secondValue);
            }
        }
    }

    public static void main(String arg[])
    {
        int arr[][]= {{11,20},{30,40},{4,5},{5,4},{40,30}};
        getSymmetricPair(arr);

    }
}
(4, 5) (30, 40)

Mürəkkəblik təhlili

Zamanın mürəkkəbliyi

O (n) hara "N" massivdəki elementlərin sayıdır. HashMap istifadə etdiyimiz üçün daxiletmə / silmə / axtarış edə bilərik O (1) vaxt.

Kosmik Mürəkkəblik

O (n) hara "N" massivdəki elementlərin sayıdır. Elementləri xəritədə saxladığımızdan. Məkan mürəkkəbliyi xətti xarakter daşıyır.

References

Translate »