কম্পিউটার

জাভাস্ক্রিপ্টে প্রতিটি উইন্ডোর জন্য মধ্যমা খোঁজা


মাঝারি

গণিতে মধ্যমা, মধ্যমা হল একটি ক্রমানুসারে (বাছাই করা) পূর্ণসংখ্যা তালিকার মধ্যম মান।

যদি তালিকার আকার সমান হয়, এবং কোন মধ্যম মান নেই। মধ্যমা হল দুটি মধ্যম মানের গড় (গড়)।

সমস্যা

আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা প্রথম আর্গুমেন্ট হিসাবে পূর্ণসংখ্যা, arr এবং একটি সংখ্যা num (num <=অ্যারে অ্যারের দৈর্ঘ্য) দ্বিতীয় আর্গুমেন্ট হিসাবে নেয়৷

এখন অ্যারে অ্যারের আকার সংখ্যার প্রতিটি উইন্ডোর জন্য, আমাদের ফাংশনের মধ্যম গণনা করা উচিত এবং সেই মধ্যকার মানটিকে একটি নতুন অ্যারেতে পুশ করা উচিত এবং অবশেষে পুনরাবৃত্তির শেষে সেই মধ্যক অ্যারেটি ফিরিয়ে দেওয়া উচিত।

উদাহরণস্বরূপ, যদি ফাংশনে ইনপুট হয় −

const arr = [5, 3, 7, 5, 3, 1, 8, 9, 2, 4, 6, 8];
const num = 3;

তারপর আউটপুট −

হওয়া উচিত
const output = [5, 5, 5, 3, 3, 8, 8, 4, 4, 6];

আউটপুট ব্যাখ্যা:

শুরু সূচক বর্তমান উইন্ডো বর্তমান সাজানো উইন্ডো মাঝারি
0 [5, 3, 7] [3, 5, 7] 5
1 [3, 7, 5] [3, 5, 7] 5
2 [7, 5, 3] [3, 5, 7] 5
3 [5, 3, 1] [1, 3, 5] 3
4 [3, 1, 8] [1, 3, 8] 3
5 [1, 8, 9] [1, 8, 9] 8
6 [8, 9, 2] [2, 8, 9] 8
7 [9, 2, 4] [2, 4, 9] 4
8 [2, 4, 6] [2, 4, 6] 4
9 [৪, ৬, ৮] [৪, ৬, ৮] 6

উদাহরণ

এর জন্য কোড হবে −

const arr = [5, 3, 7, 5, 3, 1, 8, 9, 2, 4, 6, 8];
const num = 3;
const binarySearch = (arr, target, l, r) => {
   while (l < r) {
      const mid = Math.floor((l + r) / 2);
      if (arr[mid] < target) l = mid + 1;
      else if (arr[mid] > target) r = mid;
      else return mid;
   };
   if (l === r) return arr[l] >= target ? l : l + 1;
}
const medianSlidingWindow = (arr = [], num = 1) => {
   let l = 0, r = num - 1, res = [];
   const window = arr.slice(l, num);
   window.sort((a, b) => a - b);
   while (r < arr.length) {
      const median = num % 2 === 0 ? (window[Math.floor(num / 2) - 1] + window[Math.floor(num / 2)]) / 2 : window[Math.floor(num / 2)];
      res.push(median);
      let char = arr[l++];
      let index = binarySearch(window, char, 0, window.length - 1);
      window.splice(index, 1);
      char = arr[++r];
      index = binarySearch(window, char, 0, window.length - 1);
      window.splice(index, 0, char);
   }
   return res;
};
console.log(medianSlidingWindow(arr, num));

কোড ব্যাখ্যা:

এই সমাধানের পিছনে ধারণা হল ডান নম্বর সন্নিবেশ করার জন্য বাইনারি অনুসন্ধান ব্যবহার করা এবং স্লাইডিং উইন্ডোটিকে ডানদিকে সরানোর সময় বাম নম্বর সরানো৷

আউটপুট

এবং কনসোলে আউটপুট হবে −

[5, 5, 5, 3, 3, 8, 8, 4, 4, 6 ]

  1. জাভাস্ক্রিপ্টে একটি অ্যারের মধ্যমা গণনা করা হচ্ছে

  2. জাভাস্ক্রিপ্টে অ্যারের জন্য স্প্রেড অপারেটর

  3. জাভাস্ক্রিপ্টে বিবৃতিতে...এর জন্য ব্যাখ্যা কর?

  4. জাভাস্ক্রিপ্টে প্রতিটি নোডের জন্য পরবর্তী বৃহত্তর নোড খোঁজা হচ্ছে