ในปัญหานี้ เราคืออาร์เรย์ arr ของค่าจำนวนเต็ม n ค่า งานของเราคือ ค้นหาองค์ประกอบที่เกิดซ้ำครั้งแรกในอาร์เรย์ของจำนวนเต็ม .
เราจำเป็นต้องค้นหาค่าจำนวนเต็มแรกจากอาร์เรย์ที่เกิดขึ้นมากกว่าหนึ่งครั้งในอาร์เรย์
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input : arr[] = {4, 1, 8, 9, 7, 2, 1, 6, 4}
Output : 4 คำอธิบาย −
Integers with more than one occurrence are 4 and 1. 4's first occurrence is smaller than 1. Hence the answer is 4
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการใช้การวนซ้ำซ้อน เราจะใช้สองลูป วงนอกหนึ่งเพื่อวนซ้ำแต่ละค่าจำนวนเต็มของอาร์เรย์และวงในเพื่อตรวจสอบว่ามีค่าจำนวนเต็มอื่นอยู่ในอาร์เรย์ที่มีค่าเท่ากันหรือไม่ ถ้าใช่ ส่งคืนค่า วิธีนี้เป็นวิธีที่ดี แต่ในกรณีที่ไม่มีวิธีแก้ไข จะมีความซับซ้อน O(N2)
แนวทางการแก้ปัญหา
อีกวิธีหนึ่งที่สามารถแก้ปัญหาได้ดีขึ้นคือการใช้การแฮช เราจะสำรวจอาร์เรย์จากดัชนีล่าสุด จากนั้นอัปเดตดัชนีขั้นต่ำสำหรับองค์ประกอบที่พบในดัชนีที่เข้าชม
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include<bits/stdc++.h>
using namespace std;
int findRepeatingElementArray(int arr[], int n){
int minRetIndex = -1;
set<int> visitedElements;
for (int i = n - 1; i >= 0; i--){
if (visitedElements.find(arr[i]) != visitedElements.end())
minRetIndex = i;
else
visitedElements.insert(arr[i]);
}
if (minRetIndex != -1)
return arr[minRetIndex];
else
return -1;
}
int main(){
int arr[] = {4, 1, 6, 3, 4, 1, 5, 8};
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"The element with repeated occurence is "<<findRepeatingElementArray(arr, n);
} ผลลัพธ์
The element with repeated occurence is 4