Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1and nums2 are m and n respectively.
思路1:
全部复制到nums1,然后整体排序,假如里面是冒泡排序的话,时间复杂度是O(n^2),
public void merge(int[] nums1, int m, int[] nums2, int n) { System.arraycopy(nums2, 0, nums1, m,n); Arrays.sort(nums1); }
思路2:
整个思路就是,从后面开始比较,将大的数往数组1的最后推,如果nums2推完了,需要加上条件j>=0,假如nums1推完了,还得继续推2,时间复杂度是O(n)
思考过程
1、先将可以比较的后推
int k=m+n-1;//最后一位 int i=m-1; int j=n-1; while(k>=0) { if(nums2[j]>nums1[i]) { nums1[k--]=nums2[j--]; } else { nums1[k--]=nums1[i--]; } }
2、假如nums2已经推完了,需要加上条件j>=0
3、假如nums1推完了,那么还需要继续将nums2往nums1里面插
public void merge(int[] nums1, int m, int[] nums2, int n) { int k=m+n-1;//最后一位 int i=m-1; int j=n-1; while(k>=0) { if(i<0 || (j>=0 &&nums2[j]>nums1[i])) { nums1[k--]=nums2[j--]; } else { nums1[k--]=nums1[i--]; } } }