সমস্যা বিবরণ
একটি অ্যারে arr[] (সাইজ n) দেওয়া আছে। আমাদের কাজ হল অ্যারেতে প্রথম যে উপাদানটি একাধিকবার আসেছে তা বের করা।
উদাহরণ
ইনপুট: {4,1,8,9,7,2,1,6,4}
আউটপুট: 4
ব্যাখ্যা: ৪ এবং ১ রিপিট হয়েছে। ৪-এর প্রথম অকারেন্স ১-এর চেয়ে আগে।
সমাধানের পদ্ধতি
হ্যাশ সেট ব্যবহার করে ডান থেকে বামে ট্রাভার্সাল। ভিজিটেড সেটে থাকলে সেই ইনডেক্স সেভ করা। সবচেয়ে বামের ইনডেক্সই উত্তর।
প্রোগ্রাম উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int firstRepeating(int arr[], int n) {
unordered_set<int> vis;
int ansIdx = -1;
for(int i=n-1;i>=0;i--){
if(vis.count(arr[i])) ansIdx=i;
else vis.insert(arr[i]);
}
return (ansIdx==-1)? -1 : arr[ansIdx];
}
int main() {
int arr[]={4,1,6,3,4,1,5,8};
cout << firstRepeating(arr,8); // 4
return 0;
}
আউটপুট
4