हमें एक JavaScript फ़ंक्शन लिखना है जो पहले और एकमात्र तर्क के रूप में संख्याओं की एक सरणी लेता है।
फ़ंक्शन को सरणी से एक ऐसी संख्या ढूंढकर वापस करनी चाहिए जो अपने तत्काल दाएं और तत्काल बाएं दोनों संख्याओं से बड़ी हो। यदि सरणी में एक से अधिक ऐसा तत्व मौजूद है, तो हमारा फ़ंक्शन उनमें से किसी एक को वापस करना चाहिए।
उदाहरण के लिए -
यदि इनपुट सरणी है -
const arr = [3, 6, 7, 9, 8, 2, 5];
तो आउटपुट होना चाहिए -
const output = 9;
चूंकि प्रश्न शिखर तत्व (peak element) ढूंढने की मांग करता है, हम बाइनरी खोज एल्गोरिदम के एक संशोधित संस्करण का उपयोग कर सकते हैं।
इसके चरण निम्नलिखित होंगे -
- किसी भी तत्व को देखें।
- यदि अगला तत्व और पिछला तत्व दोनों वर्तमान से कम हैं, तो हमें समाधान मिल गया, वर्तमान का सूचकांक वापस करें।
- यदि अगला तत्व वर्तमान से बड़ा है, तो दाईं ओर एक शिखर होना चाहिए, दाईं ओर पुनरावर्ती रूप से देखें।
- यदि पिछला तत्व वर्तमान से बड़ा है, तो बाईं ओर एक शिखर होना चाहिए, बाईं ओर पुनरावर्ती रूप से देखें।
उदाहरण
निम्नलिखित कोड देखें:
const arr = [3, 6, 7, 9, 8, 2, 5];
const greaterThanAdjacent = (arr = [], start = 0, end = arr.length) => {
let mid = start + Math.floor((end - start) / 2);
let curr = arr[mid];
let prev = mid - 1 < 0 ? -Infinity : arr[mid - 1];
let next = mid + 1 > arr.length - 1 ? -Infinity : arr[mid + 1];
if (curr > prev && curr > next) {
return arr[mid];
}
if (curr < next) {
return greaterThanAdjacent(arr, mid + 1, end);
}
if (curr > next) {
return greaterThanAdjacent(arr, start, mid - 1);
}
return null;
};
console.log(greaterThanAdjacent(arr));
आउटपुट
कंसोल आउटपुट निम्नलिखित है -
9