## Example
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
Explanation: The arrays we are merging are [1,2,3] and [2,5,6].
The result of the merge is [1,2,2,3,5,6] with the underlined elements coming from nums1.
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.
Solution:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
/**
1: find the biggest element in both array
2: populate the largest one into nums1 array
3: if there are still some element in nums2, just put into nums1 array
*/
int len1 = m - 1;
int len2 = n - 1;
int finalLen = m + n -1;
while(len1 >= 0 && len2 >= 0){
nums1[finalLen--] = (nums1[len1] > nums2[len2]) ?
nums1[len1--] : nums2[len2--];
}
while(len2 >= 0){
nums1[finalLen--] = nums2[len2--];
}
}
Tips:
1: The name of the variable name, can't name the key word like: "final, class"
2: make the different of
nums1[resultLen--] = (nums1[len1] > nums2[len2]) ?
nums1[len1--] : nums2[len2--];
# the same as:
if(nums1[len1] > nums2[len2]){
a = nums1[len1];
len1--;
}else{
a = nums1[len1];
len2--;
}
and this one. They are totally different between each other.
if(nums1[len1] > nums2[len2]){
a = nums1[len1];
}else{
a = nums1[len1];
}
len1--;
len2--;