इस समस्या में, हमें क्रमबद्ध अद्वितीय मानों की एक सरणी गिरफ्तारी दी जाती है। हमारा कार्य यह पता लगाना है कि क्या सरणी में कोई तत्व है जिसका मान सरणी योग का आधा है .
समस्या का विवरण: एरे एआर [] के लिए, हमें ऐरे में एलिमेंट x को इस तरह ढूंढना होगा कि एरे के सभी एलिमेंट्स का योग 2*X के बराबर हो।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: गिरफ्तारी [] ={2, 4, 5, 6, 7}
आउटपुट: नहीं
स्पष्टीकरण:
योग =2 + 4 + 5 + 6 + 7 =24
कोई तत्व नहीं मिला।
समाधान दृष्टिकोण:
समस्या को हल करने के लिए, हमें केवल उन तत्वों को खोजने की आवश्यकता है जो सरणी के सभी तत्वों के योग का आधा है।
एल्गोरिदम:
चरण 1: सरणी के सभी तत्वों का योग ज्ञात कीजिए।
चरण 2: यदि योग मान विषम है, तो -1 लौटाएं।
चरण 3: यदि योग मान सम है, तो तत्व x को इस प्रकार ज्ञात कीजिए कि x*2 =योग।
चरण 4: यदि तत्व मिला, तो वापसी 1.
चरण 5: अगर तत्व नहीं मिला तो वापसी -1।
तत्व को खोजने के लिए, हम बाइनरी सर्च एल्गोरिथम . का उपयोग कर सकते हैं जैसा कि इसे क्रमबद्ध किया गया है।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <iostream>
using namespace std;
int checkForElement(int array[], int n) {
int arrSum = 0;
for (int i = 0; i < n; i++)
arrSum += array[i];
if (arrSum % 2)
return -1;
int start = 0;
int end = n - 1;
while (start <= end)
{
int mid = start + (end - start) / 2;
if ( ( 2 * array[mid] ) == arrSum)
return array[mid];
else if (( 2 * array[mid] ) > arrSum)
end = mid - 1;
else
start = mid + 1;
}
return -1;
}
int main() {
int array[] = { 4, 5, 6, 7, 9 };
int n = sizeof(array) / sizeof(array[0]);
int x = checkForElement(array, n);
if(x != -1)
cout<<"Element found, value is "<<x;
else
cout<<"Element not found!";
return 0;
} आउटपुट -
Element not found!