//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에 있는건데 이해가 안간다 두 방법에 대한 해석은 다음에 다시 훑어봐야겠다