ဒြပ်စင်တစ်ခုအကွာအဝေးကန့်သတ်မထားဘူးဆိုရင်ပေးထားသောခင်းကျင်းထဲမှာထပ်တူများကိုရှာပါ  


ခက်ခဲအဆင့် လွယ်ကူသော
မကြာခဏမေးတယ် Adobe က အမေဇုံ အချက်အလက် MAQ UHG Optum
အခင်းအကျင်း တားဆီးခြင်း

ပြelementsနာ“ element တစ်ခုအကွာအဝေးကိုကန့်သတ်မထားသောအခါပေးထားသောခင်းကျင်းထဲမှထပ်တူများကိုရှာပါ” သင့်တွင်ရှိသည်ဟုပြstatesနာရှိသည် အခင်းအကျင်း n ပါဝင်သည် ကိန်း။ အဆိုပါပြproblemနာကခင်းကျင်းပါလျှင်ထပ်တူဒြပ်စင်ထွက်ရှာတွေ့မှကြေငြာပါ။ အဘယ်သူမျှမထိုကဲ့သို့သောဒြပ်စင်တည်ရှိလျှင်ပြန်လာ -1 ။

နမူနာ  

ဒြပ်စင်တစ်ခုအကွာအဝေးကန့်သတ်မထားဘူးဆိုရင်ပေးထားသောခင်းကျင်းထဲမှာထပ်တူများကိုရှာပါတွယ်အပ်

[ 2, 4, 6, 2, 7, 8, 9, 7]
2, 7

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

ဒီခင်းကျင်းခြင်းတွင် 2 နှင့် 7 တစ်ခုတည်းသောထပ်ထားသော element များဖြစ်သည်။

[134, 567, 134, 456, 1000, 567, 7]
134, 567

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

ဒီခင်းကျင်းခြင်းတွင် 134 နှင့် 567 တစ်ခုတည်းသောထပ်ထားသော element များဖြစ်သည်။

ထပ်တူညီသောအစုများကို array ထဲတွင်ရှာဖွေရန် Algorithm  

  1. ကြွေးကြော်ပါ မြေပုံ.
  2. array ရဲ့ element နဲ့သူ့ရဲ့ကြိမ်နှုန်းကိုမြေပုံထဲမှာသိမ်းထားပါ။
  3. ကြေညာပါ boolean ပွောငျးလဲတတျသော မူရငျးခှဲ ထပ်တူဒြပ်စင်တည်ရှိသို့မဟုတ်မရှိမရှိစစ်ဆေးရန်။
  4. မြေပုံကိုတည့်တည့်ဖြတ်ပြီးမည်သည့်ဒြပ်စင်သည် 1 ထက်ကြီးသောကြိမ်နှုန်းရှိကြောင်းစစ်ဆေးပါ။
  5. ကြိမ်နှုန်းသည် ၁ ထက်ကြီးလျှင်၊ element ကို print ထုတ်ပြီးမိတ္တူပွားကို true သို့စတင်ပါ။
  6. အခြေအနေကကျေနပ်အားရပြီးနောက် -1 ထပ်ပွားပါကထပ်ပွားသည်မှန်မမှန်စစ်ဆေးပါ။

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

ကျွန်ုပ်တို့သည်ပြinနာတစ်ခုပေးပြီးဖြစ်သောကျွန်ုပ်တို့သည်ထပ်တူကျသော element များကိုခင်းကျင်းပြသရန်ဆုံးဖြတ်ပြီးထိုအရာများကိုပုံနှိပ်ရမည်။ ဒီအတွက်၊ a ကိုသုံးမယ် HashMap တစ်ခုချင်းစီကိုခင်းကျင်းဒြပ်စင်၏ကြိမ်နှုန်းသိုလှောင်ဘို့။ 1 ထက်ကြီးတဲ့ Frequency ဆိုတာကနံပါတ်က array ထဲမှာထပ်လုပ်တယ်ဆိုတာကိုဆိုလိုတယ်။ ဆိုလိုသည်မှာထိုနံပါတ်၏ထပ်တူကိုဆိုလိုသည်။

လည်းကြည့်ရှုပါ
ပထမ ဦး ဆုံးမဟုတ်သောထပ်ခါတလဲလဲ Element ကို

ကျနော်တို့က array နှင့်၎င်း၏အရှည်အဖြစ်အငြင်းပွားမှုများနှစ်ခုလွန်ပါပြီ။ အခု Boolean variable ကို false လို့သတ်မှတ်ပါမယ်။ နောက်မှ ထပ်၍ ထပ်မံတွေ့ရှိသော element ကိုရှာမတွေ့ပါက၊ နောက်မှစစ်ဆေးပါ မူရငျးခှဲ မှားယွင်းနေဆဲအခြားကစစ်မှန်တဲ့ဖြစ်လိမ့်မည်။ ပြီးရင်ဒီမြေပုံကိုသုံးပြီးကြိမ်နှုန်း ၁ ထက်ပိုသောဒြပ်စင်ကိုရှာပါ၊ အဲ့ဒီ element တွေကိုပုံနှိပ်မှာပါ။ အဲ့ဒါကထပ်တူကျတဲ့ element တွေကို array ထဲမှာရှာတာပါ။

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

arr [] = {2,4,6,3,1,2,4,7};

i = 0, arr [i] = 2; freq = {2: 1}

i=1, arr[i]=4; freq={2:1,4:1}

i=2, arr[i]=6; freq={2:1,4:1,6:1}

i=3, arr[i]=3; freq={2:1,4:1,6:1,3:1}

i=4, arr[i]=1; freq={2:1,4:1,6:1,3:1,1:1}

i = 5, ဆိုက်ရောက် [i] = 2; freq = {2: 2,4: 1,6: 1,3: 1,1: 1} // 2 မှ 1 အထိ '2' ၏ကြိမ်နှုန်းကိုတိုးမြှင့်,

i = 6, ဆိုက်ရောက် [i] = 4; freq = {2: 2,4: 2,6: 1,3: 1,1: 1} // 4 မှ 1 အထိ '2' ၏ကြိမ်နှုန်းကိုတိုးမြှင့်,

i=7, arr[i]=7; freq={2:2,4:2,6:1,3:1,1:1,7:1}

{2: 2,4: 2,6: 1,3: 1,1: 1,7: 1} မြေပုံမှာ freq ရှိတယ်

ယခုမြေပုံပေါ်တွင်ထပ်မံလေ့လာပါ၊ မည်သည့်တန်ဖိုးရှိသည့်ကြိမ်နှုန်းသည် ၁ ထက် ပို၍ ကြီးသည်ကိုရှာဖွေပါ။ ဤတွင် Boolean variable တစ်ခုထပ်နေသည်ကို false အဖြစ်အစပြုပြီးပြီ၊ မည်သည့်ကြိမ်နှုန်းသည် ၁ ထက်ပိုကြီးသည်ကိုစစ်ဆေးသည့်အခါကျွန်ုပ်တို့သည်ထပ်တူကိုအသစ်အဖြစ်ပြောင်းလဲမည်ဖြစ်သည်။ အကယ်၍ ကျွန်ုပ်တို့သည် loop ကိုမိတ္တူအနေဖြင့်မိတ္တူကူးပြီးထွက်သွားပါက၎င်းသည် array အတွင်း၌မပွားများပါ။

ရှင်းနေသည်မှာ 2 နှင့် 4 သည်ကြိမ်နှုန်းရှိသည်ထက် ပို၍ ကြိမ်နှုန်းရှိသည်။

ပြီးတော့ငါတို့ထွက်ရှိမှု [2] 4 ဖြစ်လာသည်။ ဒါကြောင့်ဒီဟာကထပ်ခါတလဲလဲဒြပ်ထုတွေကို array ထဲမှာဘယ်လိုရှာရတယ်ဆိုတာရဲ့ဥပမာပဲ။

ကုဒ်  

ထပ်ထည့်ထားသော element များကို array ထဲတွင်ရှာရန် C ++ code

#include <iostream>
#include <unordered_map>

using namespace std;

void getDuplicate(int arr[], int n)
{
    unordered_map<int,int> freq;

    for(int index=0;index<n;index++)
        freq[arr[index]]++;

    bool duplicate=false;
    unordered_map<int,int> :: iterator itr;
    for(itr=freq.begin();itr!=freq.end();itr++)
    {
        if(itr->second > 1)
        {
            cout<<itr->first<<" ";
            duplicate=true;
        }
    }
    if(!duplicate)
        cout<<"-1"<<endl;
}
int main()
{
    int arr[]={2,4,6,3,1,2,4,7};
    int n=sizeof(arr)/sizeof(arr[0]);
    getDuplicate(arr,n);
    return 0;
}
4 2

ထပ်ဆင့်ဒြပ်စင်များကို array ထဲတွင်ရှာရန် Java ကုဒ်

import java.util.HashMap;
class findDuplicateNumber
{
    public static void getDuplicate(int arr[], int n)
    {
        HashMap<Integer, Integer> freq=new HashMap<Integer, Integer>();
        for(int i=0; i<n; i++)
        {
            if(freq.containsKey(arr[i]))
            {
                freq.put(arr[i],freq.get(arr[i])+1);
            }
            else
            {
                freq.put(arr[i],1);
            }
        }
        boolean duplicate=false;
        for(int i:freq.keySet())
        {
            if(freq.get(i)> 1)
            {
                System.out.print(i+" ");
                duplicate=true;
            }
        }
        if(!duplicate)
            System.out.println("-1");
    }
    public static void main(String [] args)
    {
        int arr[]= {2,4,6,3,1,2,4,7};
        int len=arr.length;
        getDuplicate(arr,len);
    }
}
2 4

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

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

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

လည်းကြည့်ရှုပါ
% b = k ကဲ့သို့သောအတွဲများအားလုံး (a, b) ကိုခင်းကျင်းပါ

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

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