Advertisement

寻找有序整数数组中是否存在出现次数超过一半的元素

阅读量:

面试题:

一个长度为n的整型有序数组A,求这个数组中是否有出现次数超过n/2的元素?

解决方案:

首先,需依据数组的中间位置元素,对A[n/2 -1]这一数值进行判断。

若A[n/2 -1]与A[n/2]相等,则说明数组中可能存在符合题目要求的元素;反之,若两者不相等,则可确定数组中不存在此类元素。

分析:

由于在有序数组中,A[n/2 +1]的值大于等于A[n/2],因此当A[n/2-1]不等于A[n/2]时,所有大于或等于A[n/2]的元素数量总和将不超过n/2;同样地,小于A[n/2]的元素数量也存在类似情况,此时可以立即判定该元素不存在。基于上述分析,若发现A[n/2-1]与A[n/2]相等,则可通过两次二分查找(确保时间复杂度保持在O(log N)范围内),从而确定A[n/2]在整个数组中出现的具体次数。

存在缺陷:

未对特殊情形予以考量,例如当n等于0或n等于1时的情形未被纳入分析范围。

代码

复制代码
 #include <iostream>

    
 #include <stdlib.h>
    
 #include <stdio.h>
    
 using namespace std;
    
  
    
  
    
 int BinarySearch(int A[],

全部评论 (0)

还没有任何评论哟~