zoukankan      html  css  js  c++  java
  • 合并两个有序数组

    1.合并两个有序数组

    两个有序定长数组array1和array2。

    1>new一个新数组array3,长度为array1和array2的长度之和

    2>两个指针,分别指向array1和array2的开始或者结尾

    3>相互比较,直到一个数组遍历结束

    4>将未遍历结束的数组添加到array3中

    代码:a,b为有序数组,c为新建数组,且长度为a,b数组之和,指针从头部开始

    int i = 0;
    int j = 0;
    int k = 0;
    for (; i < c.length && j < a.length && k < b.length; i++) {
         if (a[j] <= b[k]) {
            c[i] = a[j];
            j++;
         } else {
           c[i] = b[k];
            k++;
        }
    }
    if (j == a.length) {
         for (; i < c.length; k++, i++) {
            c[i] = b[k];
         }
    }
    if (k == b.length) {
         for (; i < c.length; j++, i++) {
             c[i] = a[j];
         }
    }

    两个有序定长数组array1和array2,array1的长度为M+N,其中只有长度M是有效数据,array2的长度为N

    两个有序非定长数组array1和array2,array1的长度为M,array2的长度为N,扩张数组array1,使其长度为M+N

    1>两个指针,分别指向array1和array2有效数据的结尾

    2>相互比较,直到一个数组遍历结束

    3>将另外一个未遍历结束的数组添加到array1的开头

    代码:a,b为有序数组,a数组长度为a有效位置长度和b长度之和,flag为有效位置

    int i = a.length - 1;
    int j = flag;
    int k = b.length - 1;
    for (; i >= 0 && j >= 0 && k >= 0; i--) {
        if (a[j] >= b[k]) {
            a[i] = a[j];
            j--;
        } else {
            a[i] = b[k];
            k--;
        }
    }
    if (j == -1) {
        for (; i >= 0; k--, i--) {
            a[i] = b[k];
        }
    }
    if (k == -1) {
         for (; i >= 0; j--, i--) {
            a[i] = a[j];
        }
    }

     

  • 相关阅读:
    python写的百度贴吧相册下载
    C#的图片拼接
    删除目录下的所有".svn"文件
    centOS 6.5 yum升级 gcc4.8 然后又退回来4.4
    代理的分类简述特点
    GCC 特性整理
    纯C 实现 strpos substr strspilt str_trim
    编译putty 源码去掉 Are you sure you want to close this session? 提示
    OpenWrt tcpdump 抓包
    安卓 打飞机 app 开发 第一篇
  • 原文地址:https://www.cnblogs.com/hxlr/p/11778521.html
Copyright © 2011-2022 走看看