88. Merge Sorted Array 后插
合并两个排序的整数数组A和B变成一个新的数组。给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]
假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。
给出 A = [1, 2, 3, empty, empty]
, B = [4, 5]
合并之后 A 将变成 [1,2,3,4,5]
[一句话思路]:向前比较,把小数头插。
[一刷]没写出来:
- int[] result = new int[空间];
- for(i=0; i<n ;i++)。取数时,nums[0] nums[n-1]都要取数;新建数组时,尺寸是m+n
- 最后长数组补漏应该是while
- 后插的时候,index也是--
- m n本来就是length参数,已经有了,不用测量了
- 返回类型为void时,别新建result函数,用nums1就行
[总结]:
- 前插从第0位开始,尾插从第n-1位开始
- 返回void型函数时,用前插会覆盖。所以不管nums1是否有空位,都用尾插。
[复杂度]:时间n,空间1
[英文数据结构]:array
[其他解法]:
[题目变变变]:暂时没有用array的merge题目了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Solution { /* * @param A: sorted integer array A which has m elements, but size of A is m+n * @param m: An integer * @param B: sorted integer array B which has n elements * @param n: An integer * @return: nothing */ public void merge(int[] A, int m, int[] B, int n) { // write your code here int index = m + n - 1; int i = m - 1; int j = n - 1; while (i >= 0 && j >= 0) { if (A[i] > B [j]) { A[index--] = A[i--]; } else { A[index--] = B[j--]; } } while (i >= 0) { A[index--] = A[i--]; } while (j >= 0) { A[index--] = B[j--]; } } }