Leetcode 88.合并两个有序数组

45 阅读1分钟

方法一(数组内置排序方法)

var merge = function(nums1, m, nums2, n) {
  for(let i=0;i<n;i++){
      nums1[m+i]=nums2[i]
  }
  return nums1.sort((a,b)=>{
      return a-b
  })
 }

方法二(放到临时数组里)

var merge = function(nums1, m, nums2, n) {
    let temp = new Array(n+m);
    for(let i=0,p1=0,p2=0;i<n+m;i++){
        if(p1>=m){
            temp[i] = nums2[p2++]
        }else if(p2>=n){
             temp[i] = nums1[p1++]
        }else if(nums2[p2]<nums1[p1]){
            temp[i] = nums2[p2++]
        }else{
             temp[i] = nums1[p1++]
        }
    }
    for(let j=0;j<n+m;j++){
     nums1[j] =temp[j]
    }
    return nums1;
}

方法三不额外创建空间

var merge = function(nums1, m, nums2, n) {
    let k=m+n;
    for(let i=k-1,p1=m-1,p2=n-1;i>=0;i--){
        if(p1<0){
            nums1[i] = nums2[p2--];
        }else if(p2<0){
            nums1[i] = nums1[p1--];
        }else if(nums2[p2]<nums1[p1]){
            nums1[i] = nums1[p1--]
        }else{
            nums1[i] = nums2[p2--]
        }
    }
    return nums1;
};