寻找有序整数数组中是否存在出现次数超过一半的元素
发布时间
阅读量:
阅读量
面试题:
一个长度为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)
还没有任何评论哟~
