005 Merge Sorted Array
Given two sorted integer arrays nums1
and nums2
, merge nums2
into nums1
as one sorted array.
nums1
and nums2
, merge nums2
into nums1
as one sorted array.The number of elements initialized in nums1
and nums2
are m
and n
respectively. You may assume that nums1
has enough space (size that is equal to m + n
) to hold additional elements from nums2
.
Example 1:
Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
Example 2:
Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
Constraints:
0 <= n, m <= 200
1 <= n + m <= 200
nums1.length == m + n
nums2.length == n
-109 <= nums1[i], nums2[i] <= 109
Solution
Method 1
Code
public class Solution {
public void Merge(int[] nums1, int m, int[] nums2, int n) {
//put nums2 back nums1
for(int index = 0; index < n; index++){
nums1[m+index] = nums2[index];
}
foreach(int value in nums1){
Console.WriteLine(value);
}
// bubble sort
for(int i = 0; i < nums1.Length - 1 ; i++ ){
for(int j =0; j<nums1.Length-1-i; j++){
int temp = 0;
if(nums1[j]>nums1[j+1]){
temp = nums1[j];
nums1[j] = nums1[j+1];
nums1[j+1] = temp;
}
}
}
}
}
Solution ideas
Put nums2 back nums1
Bubble sort
This method is simple but inefficient.
Method 2——Current best solution
public class Solution {
public void Merge(int[] nums1, int m, int[] nums2, int n) {
int i = m-1;
int j = n-1;
int index = m+n-1;
while(i>=0 && j>=0){
if(nums1[i]>nums2[j]){ // Compare the each last number
nums1[index--] = nums1[i--];
}
else{
nums1[index--] = nums2[j--];
}
}
while(j>=0){
nums1[index--] = nums2[j--];
}
}
}
Solution ideas

From The Discuss Forum and link HERE
Last updated
Was this helpful?