मान लीजिए, हमें एक फ़ंक्शन लिखना है जो एक सरणी को इनपुट के रूप में लेता है और सरणी का अधिकतम टुकड़ा देता है जिसमें दो से अधिक अलग-अलग संख्याएं नहीं होती हैं। यदि हम इस समस्या की बारीकी से जांच करते हैं तो इसमें एक स्थिर उप सरणी की जांच करना और मूल सरणी पर पुनरावृति करना शामिल है।
इसलिए, स्लाइडिंग विंडो एल्गोरिथ्म इसके लिए बहुत उपयुक्त है। स्लाइडिंग विंडो एल्गोरिथम के माध्यम से इस समस्या को हल करने के लिए कोड होगा -
उदाहरण
const arr = [1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 6, 2, 1, 8, 1, 1 ,1 ,1, 8, 1, 1, 8, 8]; const map = { length: 0 }; let required = []; for(start = 0, end = 0; end <= arr.length; ){ if(map.length > 2){ if(map[arr[start]] === 1){ delete map[arr[start]]; map.length --; }else{ map[arr[start]]--; }; start++; }else{ if(end - start > required.length){ required = arr.slice(start, end); }; if(map[arr[end]]){ map[arr[end]]++; }else{ map[arr[end]] = 1; map.length++; } end++; } } console.log(required);
हमने सरणी में किसी भी बिंदु पर अलग-अलग वर्णों की गिनती को संग्रहीत करने के लिए एक नक्शा बनाए रखा और प्रत्येक पुनरावृत्ति पर सबसे लंबे उपसरणी की लंबाई की तुलना करते रहे, जब अलग-अलग वर्णों की संख्या 2 से अधिक हो गई, तो हमने सरणी को अगले स्थिर सरणी की खोज के लिए दाईं ओर खिसका दिया।
आउटपुट
कंसोल में आउटपुट होगा -
[ 1, 8, 1, 1, 1, 1, 8, 1, 1, 8, 8 ]