当前位置: 首页 > 后端技术 > Java

【修订版】Leetcode88合并两个有序数组

时间:2023-04-01 15:08:20 Java

给你两个有序整数数组nums1和nums2,请将nums2合并到nums1中,使nums1成为有序数组。分别用m和n个元素初始化nums1和nums2。您可以假设nums1的空间大小等于m+n,这样它就有足够的空间容纳nums2中的元素。示例1:输入:nums1=[1,2,3,0,0,0],m=3,nums2=[2,5,6],n=3输出:[1,2,2,3,5,6]示例2:输入:nums1=[0],m=0,nums2=[1],n=1输出:[1]示例3:输入:nums1=[5,6,7,8,0,0,0],m=4,nums2=[2,3,3],n=3Output:[2,3,3,5,6,7,8]解题思路这道题显然出自于nums1array最后倒序合并。使用双指针的方法合并两个有序数组,比较两个元素的大小,从后面合并较大的元素。当其中一个数组全部合并后,只需要合并另一个数组的剩余元素即可。classSolution{publicvoidmerge(int[]nums1,intm,int[]nums2,intn){//使用双指针方法合并两个有序数组//i=>nums1arraystartsubscript//j=>nums2数组开始下标inti=m-1,j=n-1;for(intp=nums1.length-1;p>=0;p--){if(i==-1){//nums1已经合并,只需要合并nums2nums1[p]=nums2[j--];}elseif(j==-1){//nums2已经合并,只需要合并nums1nums1[p]=nums1[i--];}elseif(nums1[i]>nums2[j]){//合并较大的元素并将下标提前一个nums1[p]=nums1[i--];}else{nums1[p]=nums2[j--];}}}}