88. Merge Sorted Array

来源:互联网 发布:windows xp手机桌面 编辑:程序博客网 时间:2024/06/06 02:56

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的长度为m,nums2的长度为n,需要合并两个有序数组,合并到nums1中。

解法1:

从头开始扫描,nums1中的元素小就覆盖一遍,增加计数值,nums2的元素小就把当前位置之后的元素整体向后移动一位,然后放入nums2元素的值。相当于找到对应的位置,把nums2中的元素一个一个插入进来。


public static void merge(int[] nums1, int m, int[] nums2, int n){int i=0;int j=0;int cnt=0;int tail=m;while(j<n){if(i<tail&&nums1[i]<=nums2[j]){nums1[cnt++]=nums1[i];}else{for(int k=tail;k>=cnt+1;k--)nums1[k]=nums1[k-1];tail++;nums1[cnt++]=nums2[j++];}i++;}}



解法2:

直接选两个数组当前较小元素放入nums1,如果从头开始操作可能会覆盖掉原来nums1的还未遍历到的元素,可以改成从尾开始。

public void merge(int A[], int m, int B[], int n) {        int i = m - 1, j = n - 1, k = m + n - 1;        while(i >= 0 && j >= 0) {            A[k--] = A[i] > B[j] ? A[i--] : B[j--];        }        while(j >= 0) {            A[k--] = B[j--];        }    }


0 0
原创粉丝点击