Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
解题思路一:
使用一个nums1Copy把nums1的前m个元素拷贝出来,然后把nums1Copy和nums2放进nums1中,JAVA实现如下:
public void merge(int[] nums1, int m, int[] nums2, int n) { int[] nums1Copy=new int[m]; for(int i=0;i<m;i++) nums1Copy[i]=nums1[i]; int i=0,j=0,k=0; while(i<m&&j<n){ if(nums1Copy[i]<nums2[j]) nums1[k++]=nums1Copy[i++]; else nums1[k++]=nums2[j++]; } if(i>=m-1) while(j<n) nums1[k++]=nums2[j++]; if(j>=n-1) while(i<m) nums1[k++]=nums1Copy[i++]; }
解题思路二:
思路一会有一定的空间复杂度,可以直接把nums1中的前m个元素往右平移n个单位,然后进行合并,JAVA实现如下:
public void merge(int[] nums1, int m, int[] nums2, int n) { for(int i=m+n-1;i>=n;i--) nums1[i]=nums1[i-n]; int i=n,j=0,k=0; while(i<m+n&&j<n){ if(nums1[i]<nums2[j]) nums1[k++]=nums1[i++]; else nums1[k++]=nums2[j++]; } if(i>=m+n) while(j<n) nums1[k++]=nums2[j++]; }
时间: 2024-10-05 05:01:49