Leetcode 88. Merge Sorted Array

题目


Leetcode 88. Merge Sorted Array_第1张图片
Merge Sorted Array

题目大意:将两个有序数组合并为一个,并放到第一个数组内,其中第一个数组已经有足够的空间储存两个数组的值。

从后往前比较。

代码如下:

public class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //当第一个数组为空时直接将第二个数组的值复制到第一个数组
        if (m == 0) {
            for (int i = n-1;i>=0;i--){
                nums1[i] = nums2[i];
            }
        }
        else if (m!=0 && n!=0){
            int as = m - 1;
            int bs = n - 1;
            int mns = m + n - 1;
            //逆向比较的过程
            for (int i = 0; i < m + n; i++) {
                if (nums1[as] > nums2[bs]) {
                    nums1[mns--] = nums1[as];
                    as--;
                } else if (nums1[as] < nums2[bs]) {
                    nums1[mns--] = nums2[bs];
                    bs--;
                } else {
                    nums1[mns--] = nums1[as];
                    nums1[mns--] = nums2[bs];
                    as--;
                    bs--;
                }
                if (as < 0 || bs < 0)
                    break;
            }
            //当其中一个数组比较完后,直接将不为空数组的值复制到第一个数组
            if (as < 0 && bs >= 0) {
                while (bs >= 0) {
                    nums1[mns--] = nums2[bs];
                    bs--;
                }
            } else if (as >= 0 && bs < 0){
                while (as >= 0) {
                    nums1[mns--] = nums1[as];
                    as--;
                }
            }
        }
    }
}

你可能感兴趣的:(Leetcode 88. Merge Sorted Array)