zoukankan      html  css  js  c++  java
  • 两个有序数组排序问题(剑指offer第二版55页“举一反三”部分)

    问题:

    两个有序数组,合并成一个有序数组,假设第一个数组空间足够容纳两个数组。


    分析:
    考虑到num1数组很大,可以直接在num1数组上进行合并,但是要讲究效率。如果单纯从前往后合并,那么效率会非常低,因为a数组后面的数字需要进行多次的移动,时间复杂度为O(n^2)
    换一种思路,我们采用从后往前合并,首先计算出总长度,设置指针num1和num2分别指向原先两个数组的最后一个元素,newIndex表示新的数组的最后一个元素,然后开始对应的元素复制即可,直到num2中的所有元素都被复制进num1

    代码如下:

     1 void merge(int *nums1, int m, int *nums2, int n)
     2 {
     3     int newIndex = m + n - 1;
     4     int nums1I = m - 1, nums2I = n - 1;
     5     while (nums1I >= 0 && nums2I >= 0)
     6     {
     7         if (nums1[nums1I] >= nums2[nums2I])
     8         {
     9             nums1[newIndex] = nums1[nums1I];
    10             newIndex--;
    11             nums1I--;
    12         }
    13         else
    14         {
    15             nums1[newIndex] = nums2[nums2I];
    16             newIndex--;
    17             nums2I--;
    18         }
    19     }
    20     //关于nums1的判决其实可以不需要
    21     /*while (nums1I >= 0)
    22     {
    23         nums1[newIndex] = nums1[nums1I];
    24         newIndex--;
    25         nums1I--;
    26     }*/
    27     while (nums2I >= 0)
    28     {
    29         nums1[newIndex] = nums2[nums2I];
    30         newIndex--;
    31         nums2I--;
    32     }
    33 }
  • 相关阅读:
    服务器控件的 ID,ClientID,UniqueID 的区别
    GridView使用总结
    javascript对象
    如何对SQL Server 2005进行设置以允许远程连接(转载)
    Master Pages and JavaScript document.getElementById
    Linux paste命令
    linux脚本和代码的加密
    SDWAN的优势
    dsd
    ASA防火墙忘记密码之后的恢复步骤
  • 原文地址:https://www.cnblogs.com/dapeng-bupt/p/6972428.html
Copyright © 2011-2022 走看看