Merge Sorted Array --合并数组
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 nums1 and nums2 are m and n respectively.
意思:把两个有序数组合并为一个有序数组,但不能增加辅助数组,只能合并到nums1数组;
思路:
1.归并排序,在后面往回扫比较,不然会覆盖nums1原来的数据;
2.插入排序,逐个比较,找到合适的插入位置。
1.归并排序代码实现如下:
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { if(nums1==null || nums2==null) return; int idx1 = m-1; int idx2 = n-1; int len = m+n-1; while(idx1>=0 && idx2>=0){ //当两者大于0时 if(nums1[idx1]>nums2[idx2]){ nums1[len--] = nums1[idx1--]; }else{ nums1[len--] = nums2[idx2--]; } } while(idx2>=0){ //将剩下的添加到nums1中 nums1[len--] = nums2[idx2--]; } } } //风骚写法 public void merge(int A[], int m, int B[], int n) { int i=m-1, j=n-1, k=m+n-1; while (i>-1 && j>-1) A[k--]= (A[i]>B[j]) ? A[i--] : B[j--]; while (j>-1) A[k--]=B[j--]; }
2.插入排序代码:
class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i,j; for(i = m;i<m+n;i++){ j = i-1; //从nums1的数组后面开始找插入位置 int tmp = nums2[i-m]; //tmp存储要插入的数据 while( j>=0 && tmp<nums1[j]){ //找插入位置 nums1[j+1] = nums1[j]; j--; } nums1[j+1]=tmp; } } }

浙公网安备 33010602011771号