zoukankan      html  css  js  c++  java
  • 算法

    最近看到一个算法题目,觉得很有意义,就自己查资料,摸索着自己实现了代码,特记录一下。

    题目:有两个数组a[]和b[],将它们合并成数组c[],需要c[]也是有序数组。

    有两种实现思路:

    1. 定义一个新数组,长度为两个数组长度之和,将两个数组都copy到新数组,然后排序。

    2. 给两个数组分别定义一个下标,最大长度是数组长度减一,按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标超过数组长度时退出循环,此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成。

    第一种方式应该是大多数人想到的,也比较容易实现,下面主要来实现第二种方式。

    代码如下:

            public static int[] MergeList(int a[],int b[])
            {
                int result[];  
    //                定义一个新数组,长度为两个数组长度之和
                    result = new int[a.length+b.length];
                  //i:a数组下标    j:b数组下标  k:新数组下标
                    int i=0,j=0,k=0;
    //                按位循环比较两个数组,较小元素的放入新数组,下标加一(注意,较大元素对应的下标不加一),直到某一个下标等于数组长度时退出循环
                    while(i<a.length && j<b.length)
                        if(a[i] <= b[j]) {
                            result[k++] = a[i++];
                            print(result);
                            System.out.println();
                        }else{
                            result[k++] = b[j++];
                        }
                    /* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 *
                     * 此时较短数组已经全部放入新数组,较长数组还有部分剩余,最后将剩下的部分元素放入新数组,大功告成*/
                    while(i < a.length) 
                        result[k++] = a[i++];
                    while(j < b.length)
                        result[k++] = b[j++];
                    return result;
               }
  • 相关阅读:
    Ubuntu 16.04 设置静态IP 注意事项
    C++ Primer: 1. 初识输入和输出
    车牌识别1:License Plate Detection and Recognition in Unconstrained Scenarios阅读笔记
    梳理检测论文-Refinement Neural Network
    linux 的 磁盘管理
    ubuntu 18 设置语言环境
    Ubuntu 18.04 的网络配置
    YoLo 实践(1)
    Distributed TensorFlow
    MXNet 分布式环境部署
  • 原文地址:https://www.cnblogs.com/clarke157/p/6910425.html
Copyright © 2011-2022 走看看