इस समस्या में, हमें आकार N का एक अनियंत्रित सरणी arr[] दिया जाता है जिसमें 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 सेंट . का योग 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