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];
        }
    }

     

  • 相关阅读:
    go语言第一问:在其他地方执行编译go语言程序,结果会在哪个地方产生?
    ip地址获取无效,自己修改ip地址
    linux和windows双向互通的压缩包格式zip
    在notepad++中tab和空格的区别
    Django ----- app 和 ORM的操作和介绍
    Mysql --- 索引
    Mysql --创建用户和授权,备份
    Mysql --数据的增删改
    Mysql -- 外键的变种 三种关系
    Mysql -- 完整性约束
  • 原文地址:https://www.cnblogs.com/hxlr/p/11778521.html
Copyright © 2011-2022 走看看