Array နှစ်ခုသည်တူညီသည်မဟုတ်ကိုစစ်ဆေးပါ


ခက်ခဲအဆင့် အလယ်အလတ်
မကြာခဏမေးတယ် Accenture Goldman Sachs MAQ o9 ဖြေရှင်းနည်းများ တက္ကစီ Twilio
အခင်းအကျင်း hash sorting

ပြarrနာ“ Array နှစ်ခုသည်တူညီမှုရှိ / မရှိမစစ်ဆေးပါ” ကသင့်အားနှစ်ခုပေးသည်ဟုဖော်ပြထားသည် Array များ။ ပြstatementနာကဖော်ပြသည်မှာပေးထားသော Array များသည်တန်းတူဖြစ်မဖြစ်သင်ဆုံးဖြတ်ရမည်ဟုဆိုသည်။

Array နှစ်ခုသည်တူညီသည်မဟုတ်ကိုစစ်ဆေးပါ

နမူနာ

arr1[] = { 1, 4, 2, 5, 2 };
arr2[] = { 2, 1, 5, 4, 2 };
Yes, Arrays are equal !!
arr1[] = { 1, 3, 2, 7, 2 };
arr2[] = { 2, 1, 5, 3, 2 };
No, Arrays are not equal !!

Array နှစ်ခုသည်တူညီသည်မဖြစ်ကိုစစ်ဆေးရန် Algorithm

  1. Array နှစ်ခုလုံးရဲ့အရှည်ကိုသတ်မှတ်ပါ l1 နှင့် l2 အသီးသီး။
  2. အကယ်၍ length နှစ်ခုလုံးသည်တူညီမှုရှိမရှိစစ်ဆေးပါ။ true ရှိလျှင် false ပြန်လာပါ။
  3. ဒြပ်စင်တစ်ခုစီ၏ကြိမ်နှုန်းကိုမြေပုံထဲသိုလှောင်ပြီးရေတွက်ပါ။
  4. ဒုတိယခင်းကျင်းမှုကိုဖြတ်သွားသည်
    1. တစ် ဦး လျှင်စစ်ဆေးပါ မြေပုံ arr2 element တွေမပါဘူး၊
    2. ၎င်းဒြပ်စင်၏ကြိမ်နှုန်းသည် ၀ နှင့်ညီမျှမှုရှိမရှိစစ်ဆေးပါမှန်လျှင် true သို့ပြန်သွားပါ။
    3. လက်ရှိဒြပ်စင်၏ကြိမ်နှုန်းကို 1 ဖြင့်လျှော့ချပါ၊ ၎င်းကိုလက်ရှိဒြပ်စင်၏ကြိမ်နှုန်း၏ထိုနေရာတွင်သိုထားပါ။
  5. အားလုံးတန်ဖိုးများကိုဖြတ်သန်းမှီတိုင်အောင် 4th ခြေလှမ်းပြန်လုပ်ပါ။
  6. ပြန်လာမှန်

ရှင်းလင်းချက်

ပေးထားတဲ့ Array နှစ်ခုဟာတန်းတူမဟုတ်ဆိုတာသိဖို့ပြasksနာတစ်ခုပေးတယ်။ ဒါကိုဖြေရှင်းဖို့ငါတို့သုံးမယ် တားဆီးခြင်း၎င်းသည်ကျွန်ုပ်တို့၏အချိန်ကိုသက်သာစေပြီးအချိန်ရှုပ်ထွေးမှုကိုလျော့နည်းစေသည်။

ပထမဆုံးလုပ်ရမယ့်အရာက arrays နှစ်ခုလုံးရဲ့အရှည်ကိုရှာဖို့ပါ။ ဘာဖြစ်လို့လဲဆိုတော့ condition အတွက် arrays ညီမျှတယ်ဆိုရင်၊ condition တစ်ခုကပြည့်စုံဖို့လိုတယ်။ Array နှစ်ခုစလုံးရဲ့အရှည်ကိုရှာတွေ့ရင်၊ ညီမျှခြင်းရှိမရှိ၊ မစစ်ဘူးဆိုတာကိုစစ်ဆေးဖို့လိုတယ်။ ဒါကညီမျှမှုမရှိဘူးဆိုရင် false ကိုပြန်လာပြီးနောက်ထပ်ဆက်လုပ်ဖို့မလိုအပ်ဘူး။ အကယ်၍ ၎င်းသည်ညီမျှသည်ဟုတွေ့ရှိပါကကျွန်ုပ်တို့ထပ်မံရွေ့သွားသည်။

ကျွန်ုပ်တို့သည် array1 [] တစ်ခုစီ၏ကြိမ်နှုန်းကိုမြေပုံထဲသို့ရေတွက်ပြီးသိမ်းထားလိမ့်မည်။ ဒြပ်စင်တစ်ခုတည်းကိုနှစ်ကြိမ် (သို့မဟုတ်) သုံးကြိမ်တွေ့လျှင် ၄ င်း၏ကြိမ်နှုန်းကို ၁ တိုး။ တိုးမြှင့်ပြီး၎င်းဒြပ်စင်နှင့်အတူတူပင်ကြိမ်နှုန်းသို့သိုလှောင်ရုံသာဖြစ်သည်။

နမူနာ

ဥပမာတစ်ခုကိုသုံးသပ်ကြည့်ကြစို့။

arr1 [] = {1, 4, 2, 5, 2};

arr2 [] = {2, 1, 5, 4, 2};

array1 [] ကိုဖြတ်ပြီး element တွေကိုသူတို့ရဲ့ကြိမ်နှုန်းတွေနဲ့မြေပုံထဲထည့်ပြီးတဲ့အခါမှာမြေပုံကိုအောက်ပါအတိုင်းတွေ့ရသည်။

myMap={1:1, 2:2, 4:1, 5:1}

ကျွန်ုပ်တို့မြေပုံတွင်တန်ဖိုးများရှိနေသောကြောင့်ဒုတိယခင်းကျင်းမှုကိုဖြတ်သန်း။ မြေပုံ၌ array2 ဒြပ်စင်များရှိမရှိစစ်ဆေးရန်လိုအပ်သည်။ ၎င်းတွင် array2 [] element များမပါရှိပါကကျွန်ုပ်တို့သည်ကျွန်ုပ်တို့သည် false သို့ပြန်သွားသည်။ လက်ရှိဒြပ်စင်၏ကြိမ်နှုန်းသည် 0 နှင့်ညီလျှင်၊ ၎င်းသည်မှန်ကြောင်းတွေ့ရှိပါကကျွန်ုပ်တို့သည် false ကိုပြန်သွားပါမည်။ ထို့နောက်ကျွန်ုပ်တို့သည်လက်ရှိဒြပ်စင်ကြိမ်နှုန်း၏တန်ဖိုးကိုယူပြီး ၁ သို့လျှော့ချပြီးတန်ဖိုးကိုမြေပုံထဲသို့ထပ်ထည့်သည်။ ထို့ကြောင့်တူညီသောနံပါတ်သည်တစ်ကြိမ်ထက် ပို၍ တည်ရှိပါကနောက်တစ်ကြိမ်ထပ်မံကူညီလိမ့်မည်။ ဒီအခြေအနေကြောင်းအမှု၌ပါဝင်သည်။ loop ထဲမှထွက်လာသည်နှင့်တပြိုင်နက်ကျွန်ုပ်တို့သည် array ထဲတွင်အလားတူကိန်းဂဏန်းများရှိပြီး arrays များတူညီကြသည်။ ထိုအခါမှန်ကန်တဲ့ပြန်လာပါလိမ့်မယ်။

Array နှစ်ခုသည်တူညီသည်မဟုတ်ကိုစစ်ဆေးရန် C ++ code ဖြစ်သည်

#include <unordered_map>
#include<iostream>

using namespace std;

bool areTwoArrayEqual(int arr1[], int arr2[], int l1, int l2)
{
    if (l1 !=l2)
        return false;

    unordered_map<int, int> myMap;
    for (int i = 0; i < l1; i++)
    {
        myMap[arr1[i]]++;
    }
    for (int i = 0; i < l1; i++)
    {
        if (myMap.find(arr2[i]) == myMap.end())
            return false;

        if (myMap[arr2[i]] == 0)
            return false;

        myMap[arr2[i]]--;
    }

    return true;
}
int main()
{
    int arr1[] = { 1, 4, 2, 5, 2 };
    int arr2[] = { 2, 1, 5, 4, 2 };

    int l1 = sizeof(arr1) / sizeof(int);
    int l2 = sizeof(arr2) / sizeof(int);

    if (areTwoArrayEqual(arr1, arr2, l1, l2))
        cout << "Yes, Arrays are equal !!";
    else
        cout << "No, Arrays are not equal !!";
    return 0;
}
Yes, Arrays are equal !!

Java code များ Array နှစ်ခုနှင့်တူညီမှုရှိမရှိစစ်ဆေးရန်

import java.util.*;

class twoArrayEqual
{
    public static boolean areTwoArrayEqual(int arr1[], int arr2[])
    {
        int l1 = arr1.length;
        int l2 = arr2.length;

        if (l1 != l2)
            return false;

        Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();
        int count = 0;
        for (int i = 0; i < l1; i++)
        {
            if (myMap.get(arr1[i]) == null)
                myMap.put(arr1[i], 1);
            else
            {
                count = myMap.get(arr1[i]);
                count++;
                myMap.put(arr1[i], count);
            }
        }
        for (int i = 0; i < l1; i++)
        {
            if (!myMap.containsKey(arr2[i]))
                return false;

            if (myMap.get(arr2[i]) == 0)
                return false;

            count = myMap.get(arr2[i]);
            --count;
            myMap.put(arr2[i], count);
        }

        return true;
    }
    public static void main(String[] args)
    {
        int arr1[] = { 1, 4, 2, 5, 2 };
        int arr2[] = { 2, 1, 5, 4, 2 };

        if (areTwoArrayEqual(arr1, arr2))
            System.out.println("Yes, Arrays are equal !!");
        else
            System.out.println("No, Arrays are not equal !!");
    }
}
Yes, Arrays are equal !!

ရှုပ်ထွေးဆန်းစစ်ခြင်း

အချိန်ရှုပ်ထွေး

အို (ဎ) ဘယ်မှာ “ n” သည် array ထဲရှိ element အရေအတွက်ဖြစ်သည်။ HashMap ကိုအသုံးပြုခြင်းကအချိန်များစွာရှုပ်ထွေးမှုရရန်ကျွန်ုပ်တို့ကိုခွင့်ပြုသည်။

အာကာသရှုပ်ထွေးမှု

အို (ဎ) ဘယ်မှာ “ n” သည် array ထဲရှိ element အရေအတွက်ဖြစ်သည်။ element အားလုံးကွဲပြားမယ်ဆိုရင်ငါတို့မြေပုံဟာ input ထဲမှာရှိတဲ့နံပါတ်တစ်ခုစီအတွက် key-value ကိုရပါလိမ့်မယ်။ ထို့ကြောင့်အာကာသရှုပ်ထွေးလွန်းသည်။