Leetcode刷题java之88. 合并两个有序数组

执行结果:

通过

显示详情

执行用时 :1 ms, 在所有 Java 提交中击败了96.20% 的用户

内存消耗 :36.1 MB, 在所有 Java 提交中击败了85.49%的用户

题目:

给定两个有序整数数组 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]

思路:

第一种思路就是借用一个额外的数组空间,然后再把它复制到nums1就好了,这种思路比较简单

第二种就是从后往前,利用指针进行赋值

这里又分为了两种情况

第一种就是nums1先赋值完,nums2还有元素,这时就需要直接把nums2里的元素复制到nums1中

第二种num1先赋值完,那么本身就是要存到nums1中,所以不需要特别的处理

这里对第二种方法进行编程,值得注意的是里面有一个方法

System.arraycopy(a, 0, b, 0, n)

意思是复制数组a中的元素,从0开始,复制到数组b中,从0开始,一共复制n个数据

代码:

class Solution {
  public void merge(int[] nums1, int m, int[] nums2, int n) {
    int p1 = m - 1;
    int p2 = n - 1;
    int p = m + n - 1;
    while ((p1 >= 0) && (p2 >= 0))
      nums1[p--] = (nums1[p1] < nums2[p2]) ? nums2[p2--] : nums1[p1--];
    System.arraycopy(nums2, 0, nums1, 0, p2 + 1);
  }
}

 

 

 

你可能感兴趣的:(java,Leecode,数组)