सर्कुलर सरणी
एक सरणी जिसमें अंतिम तत्व का अगला तत्व सरणी का पहला तत्व होता है, को अक्सर सर्कुलर कहा जाता है।
जाहिर है, इस तरह डेटा संग्रहीत करने का कोई तंत्र नहीं है, डेटा अभी भी सन्निहित मेमोरी ब्लॉक में संग्रहीत होगा और सर्कुलर सरणी वास्तविकता की तुलना में एक विचार अधिक है।
समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो पूर्णांकों की एक सर्कुलर सरणी arr को पहली और एकमात्र आर्ग्युमेंट के रूप में लेता है।
फ़ंक्शन को फिर एक सरणी बनाकर वापस करनी चाहिए जिसमें मूल सरणी के प्रत्येक संबंधित तत्व के लिए अगला बड़ा तत्व हो। किसी संख्या, मान लीजिए num, का अगला बड़ा नंबर उसकी ट्रैवर्सल-ऑर्डर (हमारे मामले में दाएं) में अगला पहला बड़ा नंबर है, जिसका अर्थ है कि हम सर्कुलर रूप से खोज करके उसका अगला बड़ा नंबर ढूंढ सकते हैं। यदि वह मौजूद नहीं है, तो हमें इस संख्या के लिए -1 मानना चाहिए।
उदाहरण
यदि फ़ंक्शन का इनपुट है:
const arr = [7, 8, 7];
तो आउटपुट होना चाहिए:
const output = [8, -1, 8];
आउटपुट व्याख्या
सरणी में दोनों 7 के लिए अगला बड़ा 8 है और चूंकि सरणी सर्कुलर है लेकिन 8 के लिए कोई बड़ा तत्व नहीं है इसलिए हम इसके लिए -1 रखते हैं।
कोड
const arr = [7, 8, 7]; const nextGreaterElement = (arr = []) => { const res = []; const stack = []; if (!arr || arr.length < 1){ return res; }; for (let i = 0; i < arr.length; i++) { while (stack.length > 0 && arr[stack[stack.length - 1]] < arr[i]) { const small = stack.pop(); res[small] = arr[i]; }; stack.push(i); } for (let i = 0; i < arr.length; i++) { while (stack.length > 0 && arr[stack[stack.length - 1]] < arr[i]) { const small = stack.pop(); res[small] = arr[i]; }; } const rem = stack.length; for (let i = 0; i < rem; i++) { res[stack.pop()] = -1; } return res; }; console.log(nextGreaterElement(arr));कोड व्याख्या:
सरणी पर पुनरावृति करते समय यदि हमें कोई ऐसा तत्व मिलता है जो स्टैक में मौजूद तत्व से बड़ा है, तो हम res[small] को वर्तमान बड़े तत्व पर सेट करते हैं।
अब, हम फिर से arr की शुरुआत से शुरू करते हैं और उन तत्वों को डील करते हैं जिनके लिए हम पिछले फॉर लूप में अगला बड़ा तत्व नहीं ढूंढ पाए। अंत में, अभी भी कुछ तत्व होंगे जिनके लिए कोई अगला बड़ा तत्व नहीं था।
आउटपुट
कंसोल में आउटपुट होगा:
[8, -1, 8]