Со оглед на низа парови Пронајдете ги сите симетрични парови во него


Ниво на тешкотија Лесно
Често прашувано во Амазон Капгемини Cisco Бесплатно полнење Лаборатории за месечина Опера Omeоме
Низа Хаш

Пронајдете ги сите симетрични парови - Дадени ви се неколку парови од низа. Мора да ги дознаете симетричните парови во него. За симетричниот пар се вели дека е симетричен кога во парови се вели (a, b) и (c, d) во кои 'b' е еднакво на 'c' и 'a' е еднакво на 'd', т.е. (1 , 2) е симетричен пар на (2, 1).

пример

Со оглед на низа парови Пронајдете ги сите симетрични парови во него

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

Алгоритам за наоѓање на сите симетрични парови

  1. Прогласи а HashMap.
  2. Додека јас <n (должина на низата)
    1. Намести прва вредност да се низа [i] [0] и втора Вредност да arr [i] [1].
    2. Проверете дали вредноста на secondValue не е нула и дали вредноста на secondValue е еднаква на firstValue
    3. Ако е точно, тогаш отпечатете втора вредност и прва вредност.
    4. Друго ги стави првата Вредност и втората Вредност во Хашмап.
  3. Повторете го процесот од јамка до д додека не постои.

Објаснување

Дадовме парови од низа, внатре во таа низа постојат некои симетрични парови. Изјавата за проблемот вели дека мора да ги најдеме сите симетрични парови што постојат во низа. Едноставно можеме да користиме две јамки и да ги поминуваме двете низи една по една. Но, тоа нè чини поголема сложеност во времето и не можеме да имаме ефикасен код. Потоа се обидуваме да користиме подобар пристап за да ги сортираме прво по одреден редослед, но исто така ни треба и ефикасност. Значи, за да добиеме ефикасна програма, мора да користиме хаширање.

Користејќи хашмап, прво го зачувуваме првиот елемент на парот до прва вредност и вториот елемент на парот до втора Вредност, можеме да ги користиме двата елементи на пар како клуч и вредност. Itе го бараме на мапа споредувајќи клуч од еден пар со вредноста на друг пар и вредноста на истиот пар со клучот од оној на друг пар.

Toе користиме хашмап, дозволете ни да разгледаме пример за дадена низа парови, најдете ги сите симетрични парови во него

пример

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

Beе ја зачуваме вредноста на паровите на низата во firstValue и secondValue и потоа ќе ја провериме.

јас = 0,

firstValue = arr [i] [0] // пар 1-ви елемент

secondValue = arr [i] [1] // пар 2-ри елемент

firstValue = 1, secondValue = 2

Willе провериме за 1 дали има вредност на картата и условот неточен, така што ќе ги стави и двете вредности на картата.

Мапа = [{1: 2}]

јас = 1,

firstValue = arr [i] [0] // пар 1-ви елемент

secondValue = arr [i] [1] // пар 2-ри елемент

firstValue = 30, secondValue = 40

Willе провериме за 30 дали има вредност на картата и условот неточен, така што ќе ги стави и двете вредности на картата.

Мапа = [{1: 2}, {30:40}]

јас = 2,

firstValue = arr [i] [0] // пар 1-ви елемент

secondValue = arr [i] [1] // пар 2-ри елемент

firstValue = 6, secondValue = 9

Willе провериме за 6 дали има вредност на картата и условот неточен, така што ќе ги стави и двете вредности на картата.

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

јас = 3,

firstValue = arr [i] [0] // пар 1-ви елемент

secondValue = arr [i] [1] // пар 2-ри елемент

firstValue = 2, secondValue = 1

Willе провериме за 1 дали има вредност на картата и дали постои како „2“, тогаш ќе провериме дали елементот на secondValue е еднаков на firstValue и овој услов исто така задоволува.

Значи, ние печатиме (1, 2)

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

јас = 4,

firstValue = arr [i] [0] // пар 1-ви елемент

secondValue = arr [i] [1] // пар 2-ри елемент

firstValue = 9, secondValue = 6

Willе провериме за 6 дали има вредност во картата и дали постои како „9“, тогаш ќе провериме дали елементот secondValue е еднаков на firstValue и овој услов исто така задоволува.

Значи, ние печатиме (1, 2), (6, 9)

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

Код

Програма C ++ за наоѓање на сите симетрични парови

#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)

Java програма за да ги пронајдете сите симетрични парови

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)

Анализа на сложеност

Временска комплексност

Тој) каде „Н“ е бројот на елементи во низата. Бидејќи користевме HashMap, можеме да извршиме вметнување / бришење / пребарување во О (1) време.

Комплексноста на просторот

Тој) каде „Н“ е бројот на елементи во низата. Бидејќи имаме зачувано елементи на картата. Комплексноста на просторот е линеарна.

Референци