[LeetCode]Merge Sorted Array

오트밀·2022년 1월 24일
0
//non-decreasing order...? 그냥 오름차순이라고 하지 ascending order...

 
import java.util.Arrays;

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int index = 0;

        for(int i = m; i < nums1.length; i++){
            if(nums1[i] == 0){
                nums1[i] = nums2[index];
                index++;
            }
        }
        Arrays.sort(nums1);
    }
}



class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int index = m + n - 1;
        int i = m - 1;
        int j = n - 1;
        
        while(i >= 0 && j >= 0){
            if(nums1[i] < nums2[j]){
                nums1[index--] = nums2[j--];
            }else{
                nums1[index--] = nums1[i--];
            }
        }
        while(j >= 0){
            nums1[index--] = nums2[j--];
        }
    }
}



class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m-1;
        int j = n-1;
        int idx = nums1.length-1;
        //start looping from last values of both arrays
        //if elements remains in both, compare them and put larger
        while(i>=0 && j>=0){
            if(nums1[i]> nums2[j]){
                nums1[idx] = nums1[i];
                i--;
            }
            else{
                nums1[idx] = nums2[j];
                j--;
            }
            idx--;
        }
        //if elements are remaining in one array, fill them
        while(i>=0){
            nums1[idx] = nums1[i];
            i--;
            idx--;
        }
        while(j>=0){
            nums1[idx] = nums2[j];
            j--;
            idx--;
        }
    }
}


You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively.

Merge nums1 and nums2 into a single array sorted in non-decreasing order.

The final sorted array should not be returned by the function, but instead be stored inside the array nums1. To accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged, and the last n elements are set to 0 and should be ignored. nums2 has a length of n.

내림차순으로 나열되지 않은 integer 배열 nums1,nums2가 주어진다. integer m,n 은 각 nums1, nums2 배열의 element 갯수에 해당된다.

num1, num2를 내림차순이 아닌(오름차순)의 배열로 합쳐라.배열은 num1에 합치도록 하고 num1의 길이는 m+n이 된다. nums1의 첫m개의 element들은 유효한 element들이고 나머지 n개의 element들은 0으로 설정되어있다.

-> nums1에 num2의 element들이 들어갈 n개의 자리가 있다는 뜻

첫번째 코드에서 살짝 꼬여서 오래걸림... 밑의 두 방법은 discussion에 있는건데 이해가 안간다 두 방법에 대한 해석은 다음에 다시 훑어봐야겠다

profile
루틴을 만들자

0개의 댓글