leetcode 88.合并两个有序数组

张开发
2026/4/21 5:23:47 15 分钟阅读
leetcode 88.合并两个有序数组
题目给你两个按非递减顺序排列的整数数组nums1和nums2另有两个整数m和n分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中使合并后的数组同样按非递减顺序排列。注意最终合并后数组不应由函数返回而是存储在数组nums1中。为了应对这种情况nums1的初始长度为m n其中前m个元素表示应合并的元素后n个元素为0应忽略。nums2的长度为n。示例 1输入nums1 [1,2,3,0,0,0], m 3, nums2 [2,5,6], n 3输出[1,2,2,3,5,6]解释需要合并 [1,2,3] 和 [2,5,6] 。 合并结果是 [1,2,2,3,5,6] 其中斜体加粗标注的为 nums1 中的元素。解题思路定义三个指针len1,len2分别为指向两个数组中最后一个真数据的指针len指向nums1的最后一个空位两个数组的真数据从后往前比大小较大的放在nums1的尾部len指针左移较大的那个指针也左移直至比较完成len1或者len2指针指向某一数组中的-1记得要将nums2的剩余数组元素拷贝到nums1最前面因为循环结束nums2中的元素不一定全部转移到nums1中。要用nums2的数据盖过nums1原来前面的旧数据所以拷贝到前面去。代码class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int len1 m-1; int len2 n-1; int len mn-1; while(len1 0 len2 0){ nums1[len--] nums1[len1] nums2[len2]?nums1[len1--]:nums2[len2--]; } System.arraycopy(nums2,0,nums1,0,len21); } }

更多文章