zoukankan      html  css  js  c++  java
  • LeetCode#88 Merge Sorted Array

    Problem Definiton:

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

    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.

    Solution:

    1)如果忽略 “You may assume that nums1 has enough space”,则要先在另一个额外的数组中保存所有元素,再复制回nums1,这样元素一定是最少的:

     1 def merge(nums1, m, nums2, n):
     2         nums=[0]*(m+n)
     3         i,j,k=0,0,0
     4         while i<m and j<n:
     5             if nums1[i]<=nums2[j]:
     6                 nums[k]=nums1[i]
     7                 i+=1
     8             else:
     9                 nums[k]=nums2[j]
    10                 j+=1
    11             k+=1
    12         while i<m:
    13             nums[k]=nums1[i]
    14             i+=1
    15             k+=1
    16         while j<n:
    17             nums[k]=nums2[j]
    18             j+=1
    19             k+=1
    20         nums1[:]=[]                 ######
    21         nums1+=nums

    算法本身没什么好说的,这样要注意的是注释那一行。原题要求不返回nums1而是直接修改。

    有一个标签可能叫作aList,它指向内存中的一块连续空间,表示一个数组。

    当这个标签作为merge的第一个参数,调用merge时,一个叫做nums1的标签也被挂在了这块内存上。

    所以如果把以上程序的第20和21行写成nums1=nums,则相当于:

    也就是说,aList指向的那块内存内容并没有被修改。

    而如果写成

    nums1[:]=[]             
    nums1+=nums

    的意思就相当于,把aList指向的数组(内存)清空,然后把nums的元素一个个append进去。

    2)而如果不忽略nums1 has enough space这个条件,就可以在nums1上直接操作。从nums1的末尾开始,倒着来归并。

     1 def merge(nums1, m, nums2, n):
     2     p=m-1
     3     q=n-1
     4     r=m+n-1
     5     while q>=0:
     6         if p<0 or nums2[q]>=nums1[p]:
     7             nums1[r]=nums2[q]
     8             q-=1
     9         else:
    10             nums1[r]=nums1[p]
    11             p-=1
    12         r-=1
  • 相关阅读:
    sed&awk 资料汇总 全是链接
    LeetCode Path 3Sum
    C++ mem_fun
    递归绑定
    查询当天数据
    清除script注入
    防注入查询
    我的最新分页
    群发邮件
    利用缓存
  • 原文地址:https://www.cnblogs.com/acetseng/p/4669848.html
Copyright © 2011-2022 走看看