Created
December 13, 2022 14:58
-
-
Save kapitanluffy/3b51ea53cf5380398b304e0ecf716c80 to your computer and use it in GitHub Desktop.
I have no idea what a moving median is...
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// So I had trouble with Coderbyte's "Moving Median". I have no idea what a "moving median" or a "sliding window" is. | |
// I can't understand the problem and googling it unfortunately didn't help me at that moment. Maybe I panicked? | |
// So I burned the remaining 1h50m of a 2 hour test and as I opened a new tab and searched 'moving median "javascript"' | |
// and I stumbled upon this: https://www.tutorialspoint.com/finding-median-for-every-window-in-javascript | |
// | |
// Median turns out was simply the number in the middle of the specified "sliding window". | |
// I guess I should've listened to my Math professor back in highschool jeez | |
// | |
// Below is my take on this problem | |
function main(arr) { | |
const [windowSize, ...numList] = arr; | |
const medians = []; | |
const preWindow = []; | |
const getMedian = (w) => { | |
const mid = w.length / 2 | |
if (w.length % 2 !== 0) return w[Math.floor(mid)] | |
if (w.length % 2 === 0) return (w[mid - 1] + w[mid]) / 2 | |
} | |
// the problem requires us to compute medians for windows with lengths smaller than the windowSize | |
for (let i = 0; i < windowSize - 1 && i < numList.length; i++) { | |
preWindow.push(numList[i]) | |
medians.push(getMedian(preWindow)) | |
} | |
for (let i = 0; i < numList.length && windowSize + i <= numList.length; i++) { | |
const window = numList.slice(i, windowSize+i) | |
window.sort((a, b) => a < b ? -1 : 1) | |
medians.push(getMedian(window)) | |
} | |
return medians.join(","); | |
} | |
console.log(main([3, 1, 3, 5, 10, 6, 4, 3, 1])) // 1,2,3,5,6,6,4,3 | |
console.log(main([5, 2, 4, 6])) // 2,3,4 | |
console.log(main([3, 0, 0, -2, 0, 2, 0, -2])) // 0,0,0,0,0,0,0 | |
console.log(main([3, 5, 3, 7, 5, 3, 1, 8, 9, 2, 4, 6, 8])) // 5,4,5,5,5,3,3,8,8,4,4,6 | |
console.log(main([3, 1,2,3,4,2,3,1,4,2])) // 1,1.5,2,3,3,3,2,3,2 | |
console.log(main([3, 1,3,-1,-3,5,3,6,7])) // 1,2,1,-1,-1,3,5,6 | |
console.log(main([3, -1, 5, 13, 8, 2, 3, 3, 1])) // -1,2,5,8,8,3,3,3 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, is it possible that you explain this code in the comment about the function and the loops written in the code above?