[Leetcode]Median of Two Sorted Arrays

슈퍼대디·2022년 6월 3일

알고리즘

목록 보기
2/3

이미 정렬된 2개의 배열을 합쳐 특정값을 찾는 문제이다.

접근법

단순히 2개의 배열값을 비교하여 신규 배열에 넣고 특정값(여기선 중간값)을 찾으면 될거라 생각하고 접근하여 풀었다.

풀이자체는 어렵진 않았지만 다른풀이 방법을 찾던중 좀 더 깔끔하고 효율적으로 푼 코드가 있어 기록하고자 한다.

sudo code

  • 주어진 배열의 길이를 합한 신규 배열 생성
  • 값을 비교하며 신규배열에 정렬하여 값 세팅
  • 문제에서 요구하는 mid값 찾아서 return

초기에 문제를 풀땐 와 같이 접근하였지만, 굳이 신규 배열을 만들어서 값을 넣어줄 필요는 없었다. 문제에서 요구하는 특정값(mid)의 위치를 알 수 있기때문에 해당값을 바로 리턴해 줄 수 있기 때문!

아래에 해당 코드를 공유한다

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        
    int i = 0; /* Current index of input array ar1[] */
    int j = 0; /* Current index of input array ar2[] */
    double m1 = -1, m2 = -1;
    int m = nums1.length;
    int n = nums2.length;
    for (int count = 0; count <= (m + n)/2; count++)
    {
        //store (n+m)/2-1 in m2
        m2=m1;
        if(i != m && j != n)
        {
            m1 = (nums1[i] > nums2[j]) ? nums2[j++] : nums1[i++];
        }
        else if(i < m)
        {
            m1 = nums1[i++];
        }
        // for case when j<m,
        else
        {
            m1 = nums2[j++];
        }
    }
    if((m + n) % 2 == 1){
        return m1;
    }
    else{
        return (m1+m2)/2.0;
    }
    }
}

2개의 배열값을 비교하며 mid값이 나올때까지 순차적으로 값을 대입,
짝수/홀수일때의 경우를 대비해 m1, m2로 대입하여 값을 가지고있다가 mid값에서 리턴해준다.

코드가 알아보기 쉽고 깔끔하게 작성된것 같아 개인 기록용으로 남긴다.

profile
성장하고싶은 Backend 개발자

0개의 댓글