๋ฌธ์ ๋งํฌ
Median of Two Sorted Arrays - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ num1, num2๋ฅผ ๋ณํฉํ์ฌ median ๊ฐ์ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.
median ๊ฐ์ด๋ ๋ณํฉํ ๋ฐฐ์ด์ ์ค์๊ฐ์ ์๋ฏธํ๊ณ ๋ฐฐ์ด์ด ์ง์์ผ๋๋ 2๊ฐ, ๋ฐฐ์ด์ด ํ์์ผ๋๋ 1๊ฐ๊ฐ ํด๋น๋๋ค.
์) [1,2,3,4,5] ์ median์ 3, [1,2,3,4,5,6]์ median์ (3 + 4) / 2
์กฐ๊ฑด : time complexity should be O(log (m+n))
์ ๊ทผ ๋ฐฉ๋ฒ
๋ ๋ฐฐ์ด์ ๋ณํฉํ์ฌ sort๋ฅผ ์ฌ์ฉํ๊ณ mid Index๋ฅผ ๊ตฌํด์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ์ฝ๊ธด ํ์ง๋ง JS์ ๊ธฐ๋ณธ sort ๋ฉ์๋๋ nlog(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ์๋ค.
1. ๋ณํฉํ ์ ์ฒด ๊ธธ์ด์ midIndex๋ฅผ ๋ฐฐ์ด ํํ๋ก ๊ตฌํ๋ค. (์ง์์ผ๋์ ํ์์ผ๋๋ฅผ ๋๋ ์)
const totalLen = nums1.length + nums2.length; const midIndex = totalLen % 2 === 0 ? [totalLen / 2 - 1, totalLen / 2] : [Math.floor(totalLen / 2)] ;โ
2. ๋ณํฉํ ๋ฐฐ์ด์ ๋ด๋ mergeArr ๋ฐฐ์ด์ ์์ฑํ๊ณ mergeArr์ ๊ธธ์ด๊ฐ midIndex[0] + 1์ผ๋๊น์ง ์๋ ๋ก์ง์ ๋ฐ๋ณตํ๋ค.
(์ง์๋ฅผ ๊ธฐ์ค์ผ๋ก midIndex[0] + 1์ ์ก์)
const mergeArr = []; let indexOne = 0; let indexTwo = 0; while(mergeArr.length <= midIndex[0] + 1){ if(nums1[indexOne] > nums2[indexTwo] || nums1[indexOne] === undefined){ mergeArr.push(nums2[indexTwo]) indexTwo++; }else{ mergeArr.push(nums1[indexOne]) indexOne++; } }
๋ง์ฝ nums1 ๋๋ nums2๊ฐ ๋๊น์ง ์งํ๋์ด index(One,Two)++์ด ์คํ๋๋ฉด undefined๊ฐ ์ถ๋ ฅ๋๋ฏ๋ก ํด๋น ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํ๋ค.
3. ๋ง๋ค์ด์ง mergeArr๋ฅผ midIndex์ ๊ธธ์ด๊ฐ 2์ผ๋์ 1์ผ๋๋ฅผ ๊ตฌ๋ถ์ง๊ณ ํด๋น index๋ฅผ ๋ฐํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
return midIndex.length === 2 ? (mergeArr[midIndex[0]] + mergeArr[midIndex[1]]) / 2 : mergeArr[midIndex[0]];
sort๋ฅผ ์ด์ฉํ๋ฉด 3์ค๋ก ํ์ด๊ฐ ๊ฐ๋ฅํ์ง๋ง ์์ ๋ฐฉ๋ฒ๊ณผ Runtime ์๊ฐ์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค.
์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ ํ์ด
sort๋ฅผ ์ฌ์ฉํ ํ์ด
// ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ ํ์ด
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function(nums1, nums2) {
const mergeArr = [];
let indexOne = 0;
let indexTwo = 0;
const totalLen = nums1.length + nums2.length;
const midIndex = totalLen % 2 === 0 ? [totalLen / 2 - 1, totalLen / 2] : [Math.floor(totalLen / 2)] ;
while(mergeArr.length <= midIndex[0] + 1){
if(nums1[indexOne] > nums2[indexTwo] || nums1[indexOne] === undefined){
mergeArr.push(nums2[indexTwo])
indexTwo++;
}else{
mergeArr.push(nums1[indexOne])
indexOne++;
}
}
return midIndex.length === 2 ? (mergeArr[midIndex[0]] + mergeArr[midIndex[1]]) / 2 : mergeArr[midIndex[0]];
};
// sort๋ฅผ ์ฌ์ฉํ ํ์ด
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function(nums1, nums2) {
const mergeArr = [...nums1,...nums2].sort((a,b) => a-b);
const totalLen = mergeArr.length;
const midIndex = totalLen % 2 === 0 ? [totalLen / 2 - 1, totalLen / 2] : [Math.floor(totalLen / 2)]
return midIndex.length === 2 ? (mergeArr[midIndex[0]] + mergeArr[midIndex[1]]) / 2 : mergeArr[midIndex[0]];
};
'์ฝ๋ฉํ ์คํธ > LeetCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] Find And Replace Pattern (0) | 2022.07.29 |
---|---|
[LeetCode] Valid Anagram (0) | 2022.07.28 |
[LeetCode] Search A 2d Matrix II (0) | 2022.07.24 |
[LeetCode] Number Of Matching Subsequences (0) | 2022.07.20 |
[LeetCode] Pascals Triangle (0) | 2022.07.19 |