zoukankan      html  css  js  c++  java
  • Merge Sorted Array

    Given two sorted interger 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 nums.The number of elements initialized in nums1 and nums2 are m and n respectively.

    按照归并排序的惯性思路,因为归并排序给定的是一个数组的两个区间,所以通常情况下会借助O(n)大小的辅助空间。思路如下:

     1 class Solution
     2 {
     3 public:
     4     void merge(vector<int> &nums1, int m, vector<int> &nums2, int n)
     5     {
     6          vector<int> A;
     7          A.resize(m+n);
     8          int pa = 0, pb = 0, i = 0;
     9          while(pa < m && pb < n)
    10          {
    11                if(nums[pa] < nums1[pb])
    12                    A[i ++] = nums1[pa ++];
    13                else
    14                    A[i ++] = nums2[pb ++];
    15          }  
    16          while(pa < m)
    17                  A[i ++] = nums1[pa ++];
    18          while(pb < n)
    19                  A[i ++] = nums2[pb ++];
    20          nums1.resize(m+n);
    21          while(--i >= 0)
    22                  nums1[i] = A[i];
    23     }  
    24 }            

      但是上述题目给定的条件更加灵活,因此可以采用尾插法,这样就不再需要辅助空间的开销,理解上也更加简洁:

     1 class Solution
     2 {
     3 public:
     4     void merge(vector<int> &nums1, int m, vector<int> &nums2, int n)
     5     {
     6         int pa = m-1, pb = n-1, i = m+n-1;
     7         while(pa >= 0 && pb >= 0)
     8         {
     9             if(nums1[pa] > nums2[pb])
    10                 nums1[i --] = nums1[pa --];
    11             else
    12                 nums1[i --] = nums2[pb --];
    13         }
    14         while(pb >= 0)
    15                 nums1[i --] = nums[pb --];
    16     }   
    17 }    
  • 相关阅读:
    IE8下,时间函数问题
    sublime有时候用快捷键时出现的是css的快捷键
    热词高亮并去重
    关于百分比的margin
    手机端后退功能
    CSS3小水滴代码
    关于Gmapping的学习2
    关于概率运动模型
    A*算法的学习
    经典ICP算法
  • 原文地址:https://www.cnblogs.com/QoQian/p/4913542.html
Copyright © 2011-2022 走看看