Sum of Max and Min
Company Interviews Question Using C++
Complete Code :
#include <iostream>
#include <vector>
struct MinMax {
int minimum;
int maximum;
};
MinMax findMinMax(const std::vector<int>& arr, int left, int right) {
MinMax result;
// If the array contains only one element
if (left == right) {
result.minimum = arr[left];
result.maximum = arr[left];
} else if (left == right - 1) {
// If the array contains two elements, compare them
result.minimum = std::min(arr[left], arr[right]);
result.maximum = std::max(arr[left], arr[right]);
} else {
// If the array has more than two elements, divide and conquer
int mid = (left + right) / 2;
MinMax leftPart = findMinMax(arr, left, mid);
MinMax rightPart = findMinMax(arr, mid + 1, right);
// Combine the results from left and right parts
result.minimum = std::min(leftPart.minimum, rightPart.minimum);
result.maximum = std::max(leftPart.maximum, rightPart.maximum);
}
return result;
}
int main() {
std::vector<int> arr = {3, 5, 4, 1, 9};
int n = arr.size();
if (n == 0) {
std::cout << "Array is empty." << std::endl;
return 0;
}
MinMax result = findMinMax(arr, 0, n - 1);
std::cout << "Minimum element is: " << result.minimum << std::endl;
std::cout << "Maximum element is: " << result.maximum << std::endl;
return 0;
}
MinMax Function :
struct MinMax {
int minimum;
int maximum;
};
English :
The heart of this algorithm lies in the findMinMax
function, which uses a divide-and-conquer approach to minimize the number of comparisons.
const std::vector<int>& arr
is the array to be processed.int left
andint right
are the indices representing the current segment of the array that we are analyzing.
Hindi :
इस कार्यक्रम की मूल विधि findMinMax
में स्थित है, जो तुलनाओं की संख्या को कम करने के लिए एक बाँटने-और-नियंत्रण का उपयोग करती है।
const std::vector<int>& arr
सरणी को प्रोसेस करने के लिए है।int left
औरint right
वे सूचक हैं जो हमारे द्वारा विश्लेषण किए जा रहे वर्ग का प्रतीक हैं।
Hinglish :
Is algorithm ki kernal findMinMax
function mein sthapit hai, jo nyuntam tulnaon ko kam karne ke liye ek vibhajit aur adhikar abhigyan upayog karta hai.
const std::vector<int>& arr
vah sarray hai jise prakriya kiya jata hai.int left
aurint right
vah soochak hain jo hamare dvara anusandhan kiye ja rahe sarray ke vishesh kshetra ko darust karte hain.
result.minimum = std::min(leftPart.minimum, rightPart.minimum);
result.maximum = std::max(leftPart.maximum, rightPart.maximum);
English :
Within the findMinMax
function, we handle three main scenarios:
If the array segment contains only one element (left == right
), then that element is both the minimum and maximum. We set the result.minimum
and result.maximum
to that element.
- If the array segment contains two elements (
left == right - 1
), we compare these two elements and setresult.minimum
andresult.maximum
accordingly. - If there are more than two elements in the array segment, we divide it into two parts by calculating the
mid
index. Then, we recursively callfindMinMax
on both the left and right segments. - After finding the minimum and maximum in both the left and right segments, we combine the results. The minimum of the two minimums becomes the minimum of the overall array, and the maximum of the two maximums becomes the maximum of the overall array.
- The
findMinMax
function returns aMinMax
struct with the minimum and maximum values for the given array segment. - In the
main
function, we create an array of integers namedarr
. You can replace this with your own array or input method. - We check if the array is empty. If it is, we print a message indicating that the array is empty.
- If the array is not empty, we call the
findMinMax
function, passing thearr
, and the starting and ending indices (0
andn - 1
, wheren
is the size of the array). - Finally, we print the minimum and maximum values obtained from the
findMinMax
function.
The divide-and-conquer algorithm helps reduce the number of comparisons compared to a simple linear search, making it an efficient way to find both the minimum and maximum elements in an array.
Hindi :
findMinMax
फ़ंक्शन के अंदर, हम तीन प्रमुख प्राधिकरणों को संभालते हैं:- अगर सरणी सेगमेंट में केवल एक मात्र तत्व होता है (
left == right
), तो वह तत्व न्यूनतम और अधिकतम दोनों होता है। हमresult.minimum
औरresult.maximum
को उस तत्व के बराबर सेट करते हैं। - अगर सरणी सेगमेंट में दो तत्व होते हैं (
left == right - 1
), तो हम इन दो तत्वों की तुलना करते हैं औरresult.minimum
औरresult.maximum
को उनके अनुसार सेट करते हैं। - यदि सरणी सेगमेंट में दो से अधिक तत्व हैं, तो हम इसे दो भागों में बाँटते हैं,
mid
सूची को हासिल करके। फिर हम पूर्ववत दाईं और बाईं सेगमेंट परfindMinMax
को रिकर्सिव रूप से बुलाते हैं। - दोनों पूर्ववत दाईं और बाईं सेगमेंट में न्यूनतम और अधिकतम का पता लगाने के बाद, हम परिणामों को मिलाते हैं। दो न्यूनतमों में से किसी एक को दुरुस्तिबद्ध किया जाता है, वही सम्पूर्ण सरणी के न्यूनतम होता है, और दो अधिकतमों में से किसी एक को अधिकतम किया जाता है, वही सम्पूर्ण सरणी के अधिकतम होता है।
findMinMax
फ़ंक्शनMinMax
संरचना के साथ वर्ग के न्यूनतम और अधिकतम मानों के साथ लौटाता है, जिन्हें सारणी सेगमेंट के लिए प्राप्त किया गया है।main
फ़ंक्शन में, हम एक पूरे संख्याओं की सरणी बनाते हैं, जिसेarr
नामक कर सकते हैं। आप इसे अपनी खुद की सरणी या इनपुट पद्धति से बदल सकते हैं।- हम यह जांचते हैं कि क्या सरणी खाली है। यदि यह ऐसा होता है, तो हम एक संदेश प्रिंट करते हैं जिसमें यह कहा गया होता है कि सरणी खाली है।
- यदि सरणी खाली नहीं है, तो हम
findMinMax
फ़ंक्शन को बुलाते हैं,arr
को पास करते हैं, और प्रारंभ और समापन सूचकों (0
औरn - 1
, जहांn
सरणी का आकार है) को पास करते हैं। - आखिरकार, हम
findMinMax
फ़ंक्शन से प्राप्त न्यूनतम और अधिकतम मानों को प्रिंट करते हैं।
बाँटने और नियंत्रण का तरीका, एक सामान्य रूप से एक सामान्य रूप से तुलना खोज की तुलना में तुलनाओं की संख्या को कम करने में मदद करता है, और यह सरणी में न्यूनतम और अधिकतम तत्वों को ढूंढने के लिए एक प्रभावी तरीका है।
Hinglish :
findMinMax
function ke andar, ham teen mukhya sthitiyon ka samavesh karte hain:- Yadi sarray kshetra mein keval ek tatv hai (
left == right
), to vah tatv nyuntam aur adhikatam dono hota hai. Humresult.minimum
aurresult.maximum
ko us tatv ke barabar set karte hain. - Yadi sarray kshetra mein do tatv hain (
left == right - 1
), to ham in do tatvon ki tulna karte hain aurresult.minimum
aurresult.maximum
ko uske anuroop set karte hain. - Yadi sarray kshetra mein do se adhik tatv hain, to usse do bhagon mein vibhajit kiya jata hai,
mid
soochi prapt karke. Fir, ham purnvarti rup sefindMinMax
ko dono baen aur daen kshetron par bulate hain. - Baen aur daen kshetron mein nyuntam aur adhikatam ko prapt karne ke baad, ham un parinamon ko milate hain. Do nyuntamon mein se ek nyuntam sarray ka nyuntam banta hai aur do adhikamon mein se ek adhikam sarray ka adhikam banta hai.
findMinMax
function sarray kshetra ke liye prapt nyuntam aur adhikatam mulyon ke sath ekMinMax
struct ko vapas karta hai.main
function mein, ham ek puri sankhyaon ki sarray banate hain, jisearr
ke naam se kaha ja sakta hai. Aap ise apni khud ki sarray ya input vidhi se badal sakte hain.- Ham dekhte hain ki kya sarray khali hai. Yadi hai, to ham ek sandesh chhapte hain jisme bataya jata hai ki sarray khali hai.
- Yadi sarray khali nahi hai, to ham
findMinMax
function ko bulate hain,arr
ko dete hain, aur shuruaat aur ant ke soochak (0 aurn - 1
, jahann
sarray ka akar hai) ko dete hain. - Ant mein, ham
findMinMax
function se prapt nyuntam aur adhikatam mulyon ko chhapte hain.
Vibhajit aur adhikar abhigyan tulnaon ke tulya khoj ke mukable tulyaon ki sankhya ko kam karne mein madad karta hai, aur ek sarray mein nyuntam aur adhikatam tatv dhundhne ke liye yah ek prabhavit tarike se hai.