Leetcode刷題Java88. 合併兩個有序數組

給你兩個有序整數數組 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成爲一個有序數組。

說明:

初始化 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]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/merge-sorted-array
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

class Solution {
        public void merge(int[] nums1, int m, int[] nums2, int n) {
            //方法一:暴力法
            //數組拷貝+排序
//            mergeI(nums1, m, nums2, n);

            //方法二:雙指針法/從後向前
            //1.定義指針len1指向nums1的數字尾部,len2指向nums2的數字尾部,len指向nums1的最末端
            //2.從後向前遍歷,比較nums1和nums2值大小,將較大者放入nums1數組尾部
            //3.當 len1<0 時遍歷結束,如果nums2數組元素未拷貝結束,則將nums2中剩下元素直接放到nums1的前面即可
//            mergeII(nums1, m, nums2, n);

            //方法三:雙指針/從前往後
            //1.定義雙指針p1指向nums1頭部,p2指向nums2頭部,比較p1和p2值大小,將較小者放入數組nums1中

            //定義數組temp將nums1中的前m元素放到temp中
            mergeIII(nums1, m, nums2, n);
        }

        private void mergeIII(int[] nums1, int m, int[] nums2, int n) {
            int[] temp = new int[m];
            System.arraycopy(nums1, 0, temp, 0, m);
            int p1 = 0, p2 = 0, p = 0;
            //比較p1和p2值,將較小者放到數組nums1
            while (p1 < m && p2 < n) {
                nums1[p++] = temp[p1] < nums2[p2] ? temp[p1++] : nums2[p2++];
            }
            //將nums1和nums2剩餘元素放到nums1中
            while (p1 < m) {
                nums1[p++] = temp[p1++];
            }
            while (p2 < n) {
                nums1[p++] = nums2[p2++];
            }
        }

        private void mergeII(int[] nums1, int m, int[] nums2, int n) {
            int len1 = m - 1, len2 = n - 1, len = m + n - 1;
            while (len1 >= 0 && len2 >= 0) {
                nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
            }
            //拷貝nums2剩餘元素
            while (len2 >= 0) {
                nums1[len--] = nums2[len2--];
            }
        }

        private void mergeI(int[] nums1, int m, int[] nums2, int n) {
            System.arraycopy(nums2, 0, nums1, m, n);
            Arrays.sort(nums1);
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章