๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/LeetCode

[LeetCode] Median Of Two Sorted Arrays

๋ฌธ์ œ๋งํฌ

 

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