LeetCode——88. 合并两个有序数组

    技术2025-01-28  7

    文章目录

    88. 合并两个有序数组题目思路代码1、直接copy再sort(耍赖做法)2、双指针法3、奇妙法:双指针从后往前遍历比较

    88. 合并两个有序数组

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-sorted-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目

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

    思路

    1、直接copy再sort(耍赖做法) 将nums2直接copy到nums1中,再对nums1排序

    public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length); 参数: src:要复制的数组(源数组) srcPos:复制源数组的起始位置 dest:目标数组 destPos:目标数组的下标位置 length:要复制的长度

    2、双指针法 定义p1、p2分别指向nums1和nums2的当前下标,比较两者nums1[p1] 和nums2[p2],将较小的值加入中间数组temp,当一个数组加入完毕,将剩下的那个数组元素直接加入temp。最终将temp元素copy到nums1即可

    3、奇妙法:双指针从后往前遍历比较 类似2的思想,不过从后往前加入元素不用借助中间数组temp,直接用p来指向最终数组nums1的下标进行操作即可,此时选取两者间较大者加入nums1尾,依次倒序加入。

    代码

    1、直接copy再sort(耍赖做法)

    /* 函数的使用 */ class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { System.arraycopy(nums2,0,nums1,m,n); Arrays.sort(nums1);//只能做升序排序 } }

    2、双指针法

    /* 双指针法 + System.arraycopy */ class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p1=0,p2=0,index=0; int []temp = new int[m+n]; while(p1 < m && p2 < n){ if(nums1[p1] <= nums2[p2]){ temp[index++] = nums1[p1++]; } else{ temp[index++] = nums2[p2++]; } } while(p1 < m){ temp[index++] = nums1[p1++]; } while(p2 < n){ temp[index++] = nums2[p2++]; } System.arraycopy(temp,0,nums1,0,m+n); } }

    3、奇妙法:双指针从后往前遍历比较

    /* 奇妙法:双指针从后往前遍历比较 */ class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p1=m-1,p2=n-1,p = m+n-1; while(p1 >= 0 && p2 >= 0){ if(nums1[p1] >= nums2[p2]){ nums1[p--] = nums1[p1--]; } else{ nums1[p--] = nums2[p2--]; } } while(p1 >= 0){ nums1[p--] = nums1[p1--]; } while(p2 >= 0){ nums1[p--] = nums2[p2--]; } // System.arraycopy(temp,0,nums1,0,m+n); } }
    Processed: 0.008, SQL: 9