Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
1 2 3 4 5 6 7 8 9 10 | void merge(int* nums1, int m, int* nums2, int n) { int n1=0,n2=0; int ans[m+n+1]; for(int i =0;i<(m+n);i++){ if(n1>=m)ans[i]=nums2[n2++]; else if(n2>=n)ans[i]=nums1[n1++]; else ans[i]= nums1[n1]<=nums2[n2]? nums1[n1++]:nums2[n2++]; } memcpy(nums1,ans,sizeof(int)*(m+n)); } |
不用額外空間 利用nums1後面的多餘空間來放大的數字
1 2 3 4 5 6 7 8 9 | void merge(int* nums1, int m, int* nums2, int n) { int n1=m-1,n2=n-1; for(int i =(m+n-1);i>=0;i--){ if(n1<0)nums1[i]=nums2[n2--]; else if(n2<0)nums1[i]=nums1[n1--]; else nums1[i]= nums1[n1]>=nums2[n2]? nums1[n1--]:nums2[n2--]; //nums1[i]= n1>=0 && nums1[n1]>= nums2[n2]? nums1[n1--]:nums2[n2--]; } } |
沒有留言:
張貼留言