效得判断这两个数组中存在相同的数字?

,判断两个数组中是否存在相同的数字 给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
这个问题首先想到的是一个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;
}

原文链接: https://www.cnblogs.com/alexzp/archive/2012/06/12/2546688.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    效得判断这两个数组中存在相同的数字?

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/52561

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午3:59
下一篇 2023年2月9日 上午4:00

相关推荐