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

     

  • 相关阅读:
    前端学习资源
    CSS样式属性单词之Left
    CSS 解决 a标签去掉下划线 text-decoration: none无效 的解决方案
    CSS二级菜单
    position属性absolute与relative 详解
    CSS行高——line-height
    VS code注释快捷键
    CSS padding margin border属性详解
    block(块级元素)和 inline(内联元素) 的区别
    css(float浮动和clear清除)
  • 原文地址:https://www.cnblogs.com/hxlr/p/11778521.html
Copyright © 2011-2022 走看看