2021-08-28

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int index = m + n -1;
        int index1 = m - 1;
        int index2 = n - 1;

        while( index1 >= 0 || index2 >= 0){
            if (index1 < 0){
                nums1[index] = nums2[index2];
                index2--;
            } else if (index2 < 0){
                break;
            } else if (nums1[index1] >= nums2[index2]){
                nums1[index] = nums1[index1];
                index1--;
            } else {
                nums1[index] = nums2[index2];
                index2--;
            }

            index--;
        }
    }
}
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1;
        int j = n - 1;
        int end = m + n - 1;
        while (j >= 0) {
            nums1[end--] = (i >= 0 && nums1[i] > nums2[j]) ? nums1[i--] : nums2[j--];
        }
    }
}
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {

        //1.0简单粗暴
        //        for (int i = 0; i < n; i++) {
        //            nums1[m + i] = nums2[i];
        //        }
        //        Arrays.sort(nums1);
        //2.0 双指针算法
        int p1 = 0, p2 = 0;
        int[] sorted = new int[m + n];
        int cur;
        while (p1 < m || p2 < n) {
            if (p1 == m) {
                cur = nums2[p2++];
            } else if (p2 == n) {
                cur = nums1[p1++];
            } else if (nums1[p1] < nums2[p2]) {
                cur = nums1[p1++];
            } else {
                cur = nums2[p2++];
            }
            sorted[p1 + p2 - 1] = cur;
        }
        for (int i = 0; i < m + n; ++i) {
            nums1[i] = sorted[i];
        }
    }

    /**
     * 数组索引值替换
     */
    private void swap(int[] num, int a, int b) {
        int temp = num[a];
        num[a] = num[b];
        num[b] = temp;
    }
}

你可能感兴趣的:(2021-08-28)