给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
来源:互联网 发布:线性优化算法 编辑:程序博客网 时间:2024/05/24 20:07
这个问题首先想到的是一个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;
- }
- 给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
- 两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
- 判断两个数组中是否存在相同的数字
- 判断两个有序数组中是否存在相同的数字
- 判断两个数组中是否存在相同的数字
- 判断两个有序数组中是否存在相同的数字
- 【指针】16周项目四。判断两个有序数组中是否存在相同的数字
- 十六周——判断两个有序数组中是否存在相同的数字
- 如何高效的判断数组中是否存在至少两个相同的数值,存在返回true,不存在返回false
- 判断两个数组中是否有相同的数字
- 判断两个有序数组中是否有相同的数字
- 给定一个数组和一个数字,给定的数组里是否存在两个数字之和等于给定的数字
- 判断数组中是否存在和等于给定值的两个数
- 用指针判断两个数组是否有相同的数字
- 两个排序后数组中是否存在相同数字
- 两个有序数组判断存在相同元素
- javascript 判断两个数组中是否存在相同元素
- 判断两个有序数组中是否有相同的数字(第十七周上机任务)
- Oracle计算时间差表达式
- imageMagick convert 压缩
- 正则表达式调试器
- 国有资产流失的现状及对策
- 编辑词条两线制变送器
- 给定两个排好序的数组,怎样高效得判断这两个数组中存在相同的数字?
- 如何让页面居中显示
- 在VC中使用SQLite的例子(转)
- SQL 2005 SP2安裝失敗
- Check Access Rights to File/Directory on NTFS Volume
- Epicor推出基于SOA的新一代ERP
- 编写功能简化的bc遇到的小问题
- Java Persistence Api
- git 之五分钟教程