1、地址

https://leetcode-cn.com/problems/merge-sorted-array/

2、题面分析

题目

image.png

题目信息

  • 无需返回值
  • 答案要在问题的输入上进行修改
  • m + n > 0 表示着返回一定是有意义的

    3、暴力破解

    代码实现(内置排序方法)(不推荐)

    1. class Solution {
    2. public void merge(int[] nums1, int m, int[] nums2, int n) {
    3. for(int i = 0; i < n; i++){
    4. nums1[m + i] = nums2[i];
    5. }
    6. Arrays.sort(nums1);
    7. }
    8. }

    代码实现(插入排序)

    ```java public class Solution {

    public void merge(int[] nums1, int m, int[] nums2, int n) {

    1. if (n == 0) {
    2. return;
    3. }
    4. int i = 0;
    5. int j = 0;
    6. int count = m;
    7. // nums2插入完成 或者 没有需要移动的nums1时结束
    8. while (count > 0 && j < n) {
    9. if (nums2[j] < nums1[i]) {
    10. for (int k = i + count - 1; k >= i; k--) {
    11. nums1[k + 1] = nums1[k];
    12. }
    13. nums1[i] = nums2[j];
    14. j++;
    15. } else {
    16. count--;
    17. }
    18. i++;
    19. }
    20. if (j < n) {
    21. count = m + j;
    22. for (int k = j; k < n; k++) {
    23. nums1[count++] = nums2[k];
    24. }
    25. }

    } }

  1. <a name="VeWYL"></a>
  2. ## 4、顺序归并
  3. <a name="VHZvR"></a>
  4. #### 代码实现
  5. ```java
  6. public class Solution {
  7. public void merge(int[] nums1, int m, int[] nums2, int n) {
  8. int[] result = new int[m + n];
  9. int i = 0;
  10. int j = 0;
  11. int tail = 0;
  12. while(i < m && j < n ){
  13. if(nums1[i] <= nums2[j]){
  14. result[tail++] = nums1[i++];
  15. }else{
  16. result[tail++] = nums2[j++];
  17. }
  18. }
  19. while(i < m){
  20. result[tail++] = nums1[i++];
  21. }
  22. while(j < n){
  23. result[tail++] = nums2[j++];
  24. }
  25. for(int k = 0; k < m + n; k++){
  26. nums1[k] = result[k];
  27. }
  28. }
  29. }

5、逆序归并

代码实现

  1. public class Solution {
  2. public void merge(int[] nums1, int m, int[] nums2, int n) {
  3. int i = m - 1;
  4. int j = n - 1;
  5. int tail = m + n -1;
  6. while(j >= 0 && i >= 0){
  7. if(nums2[j] >= nums1[i]){
  8. nums1[tail--] = nums2[j--];
  9. }else{
  10. nums1[tail--] = nums1[i--];
  11. }
  12. }
  13. if(j >= 0){
  14. for(int k = 0; k <= j; k++){
  15. nums1[k] = nums2[k];
  16. }
  17. }
  18. }
  19. }