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 }
  • 相关阅读:
    Linux查看物理CPU个数、核数、逻辑CPU个数
    shell脚本中格式化日期
    MySQL中常用字符串函数
    Xtrabackup 使用方法
    LinuxShell算术运算
    mysql高可用方案MHA介绍
    CentOS安装scp命令
    源码编译安装MySQL
    mysql编译参数详解(./configure)
    SparkStreaming 结合Kafka 时丢数据
  • 原文地址:https://www.cnblogs.com/dapeng-bupt/p/6972428.html
Copyright © 2011-2022 走看看