给定两个有序整数数组 _nums1 _和 nums2,将 _nums2 _合并到 _nums1 中,_使得 _num1 _成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
- 你可以假设 _nums1 _有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
分析:将nums2数组的元素放到nums1[m]-nums1[m+n-1]里面,然后冒泡排序nums1.
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index=0;
for(int i=m+n-1;i>=m;i--) {
nums1[i]=nums2[index++];
}
//冒泡排序
for(int i=0;i<m+n;i++) {
for(int j=0;j<m+n-i-1;j++)
if(nums1[j]>nums1[j+1]) {
int t=nums1[j];
nums1[j]=nums1[j+1];
nums1[j+1]=t;
}
}
}
}
或者:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index=m;
for(int j=0;j<n;j++) {
nums1[index++]=nums2[j];
}
Arrays.sort(nums1);
}
}
两者思路一样,但是两者效率差别很大。Arrays.sort()底层排序是快排(O(n)=nlogn)效率高于冒泡排序(o(n)=n*n)。