ধরা যাক, আমাদের এমন একটি ফাংশন লিখতে হবে যা একটি অ্যারেকে ইনপুট হিসাবে নেয় এবং অ্যারের সর্বাধিক স্লাইস প্রদান করে যাতে দুটি ভিন্ন সংখ্যা থাকে না। যদি আমরা এই সমস্যাটি ঘনিষ্ঠভাবে পরীক্ষা করি তবে এতে একটি স্থিতিশীল সাব অ্যারে পরীক্ষা করা এবং মূল অ্যারেতে পুনরাবৃত্তি করা জড়িত৷
অতএব, স্লাইডিং উইন্ডো অ্যালগরিদম এটির জন্য খুব উপযুক্ত। স্লাইডিং উইন্ডো অ্যালগরিদমের মাধ্যমে এই সমস্যা সমাধানের কোড হবে −
উদাহরণ
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 ]