मान लीजिए, हमें एक फ़ंक्शन लिखना आवश्यक है जो एक ऐरे को इनपुट के रूप में लेता है और ऐरे के अधिकतम स्लाइस को लौटाता है जिसमें दो से अधिक अलग-अलग नंबर नहीं हैं। यदि हम इस समस्या को ध्यान से देखें तो इसमें एक स्थिर सब ऐरे की जांच करना और मूल ऐरे पर पुनरावृति करना शामिल है।
इसलिए, स्लाइडिंग विंडो एल्गोरिदम इसके लिए बहुत उपयुक्त है। स्लाइडिंग विंडो एल्गोरिदम के माध्यम से इस समस्या को हल करने का कोड होगा:
उदाहरण
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 ]