ในปัญหานี้ เราได้รับอาร์เรย์ที่ไม่เรียงลำดับ arr[] ขนาด N ที่มีค่าตั้งแต่ 1 ถึง N-1 โดยมีค่าหนึ่งค่าเกิดขึ้นสองครั้งในอาร์เรย์ งานของเราคือ ค้นหาเฉพาะองค์ประกอบที่ซ้ำกันระหว่าง 1 ถึง n-1 .
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล
arr[] = {3, 5, 4, 1, 2, 1} ผลผลิต
1
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการสำรวจอาร์เรย์ และค้นหาว่าองค์ประกอบนั้นอยู่ที่อื่นในอาร์เรย์สำหรับค่าแต่ละค่าหรือไม่ ส่งคืนค่าที่มีการเกิดขึ้นสองครั้ง
ตัวอย่างที่ 1
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream>
using namespace std;
int findRepValArr(int arr[], int n){
for(int i = 0; i < n; i++)
for(int j = i+1; j < n; j++)
if(arr[i] == arr[j])
return arr[i];
}
int main(){
int arr[] = { 5, 3, 2, 6, 6, 1, 4 };
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"The repetitive value in the array is "<<findRepValArr(arr, n);
return 0;
} ผลลัพธ์
The repetitive value in the array is 6
อีกวิธีในการแก้ปัญหาคือการใช้ข้อเท็จจริงที่พบว่าค่าที่ซ้ำกันในอาร์เรย์นั้นหาได้โดยการลบผลรวมของจำนวนเต็มทั้งหมดจาก 1 ถึง (N-1) ออกจากผลรวมอาร์เรย์
ผลรวมของ 1 st จำนวนธรรมชาติ N-1 (Sn ) =n*(n-1)/2
doubleVal =arrSum - (Sn .) )
ตัวอย่างที่ 2
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream>
using namespace std;
int findRepValArr(int arr[], int n){
int arrSum = 0;
for(int i = 0; i < n; i++)
arrSum += arr[i];
int sn = (((n)*(n-1))/2);
return arrSum - sn;
}
int main(){
int arr[] = { 5, 3, 2, 6, 6, 1, 4 };
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"The repetitive value in the array is "<<findRepValArr(arr, n);
return 0;
} ผลลัพธ์
The repetitive value in the array is 6