Skip to Main Content

Moving Median

Problem URL:Moving Median

My Solution

JavaScript

function MovingMedian(arr) {
  let subArr = [],
    midpoint = 0,
    predecessors = arr[0] - 1;

  let nums = arr.slice(1);
  nums = nums.map((num, i) => {
    if (i == 0) return num;

    // get the range of arr elements for moving window
    if (i <= predecessors) {
      subArr = nums.slice(0, i + 1).sort((a, b) => a - b);
    } else {
      subArr = nums.slice(i - predecessors, i + 1).sort((a, b) => a - b);
    }

    // get midpoint
    midpoint = Math.floor(subArr.length / 2);

    // calculate the median for each range / subarray
    return subArr.length % 2
      ? subArr[midpoint]
      : (subArr[midpoint] + subArr[midpoint - 1]) / 2;
  });

  // return median list as string
  return nums.join(",");
}

Let's Connect

Twitter GitHub LinkedIn