ในปัญหานี้ เราได้รับอาร์เรย์ที่ไม่เรียงลำดับ 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