zoukankan      html  css  js  c++  java
  • 效得判断这两个数组中存在相同的数字?

    ,判断两个数组中是否存在相同的数字 给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
    这个问题首先想到的是一个O(nlogn)的算法。就是任意挑选一个数组,遍历这个数组的所有元素,遍历过程中,在另一个数组中对第一个数组中的每个元素进行binary search。用C++实现代码如下:
    bool findcommon(int a[],int size1,int b[],int size2)
    {
              int i;
              for(i=0;i<size1;i++)
              {
                   int start=0,end=size2-1,mid;
                   while(start<=end)
                   {
                        mid=(start+end)/2;
                        if(a[i]==b[mid])
                             return true;
                        else if (a[i]<b[mid])
                             end=mid-1;
                        else
                             start=mid+1;
                   }
              }
              return false;
    }
    后来发现有一个 O(n)算法。因为两个数组都是排好序的。所以只要一次遍历就行了。首先设两个下标,分别初始化为两个数组的起始地址,依次向前推进。推进的规则是比较两个数组中的数字,小的那个数组的下标向前推进一步,直到任何一个数组的下标到达数组末尾时,如果这时还没碰到相同的数字,说明数组中没有相同的数字。
    bool findcommon2(int a[], int size1, int b[], int size2)
    {
              int i=0,j=0;
              while(i<size1 && j<size2)
              {
                   if(a[i]==b[j])
                             return true;
                   if(a[i]>b[j])
                        j++;
                   if(a[i]<b[j])
                        i++;
              }
              return false;
    }

  • 相关阅读:
    ****jQuery
    LANMPS 一键PHP环境安装包(转)
    微信支付授权目录填写规则
    ***四种参数传递的形式——URL,超链接,js,form表单
    WDCP控制面板安装卸载
    html meta标签使用总结(转)
    适合wordpress中文网站的seo优化插件 DX-Seo
    事件驱动框架(二)——状态机【转】
    深入剖析变长参数函数的实现【转】
    Makefile经典教程(一个很棒很清晰的讲解)【转】
  • 原文地址:https://www.cnblogs.com/alexzp/p/2546688.html
Copyright © 2011-2022 走看看