#include<iostream>
using namespace std;
int Partiton(int arr[],int low,int high)
{
int nSmall = low-1;
for(;low<high;low++)
{
if(arr[low]<arr[high])
{
nSmall++;
if(nSmall != low)
{
arr[nSmall] = arr[low] ^ arr[nSmall];
arr[low] = arr[low] ^ arr[nSmall];
arr[nSmall] =arr[low] ^ arr[nSmall];
}
}
}
nSmall++;
if(nSmall != high)
{
arr[high] = arr[nSmall] ^ arr[high];
arr[nSmall] = arr[nSmall] ^ arr[high];
arr[high] = arr[nSmall] ^ arr[high];
}
return nSmall;
}
void QuickSort(int arr[],int low,int high)
{
if(low < high)
{
int mid = Partiton(arr,low,high);
QuickSort(arr,low,mid-1);
QuickSort(arr,mid+1,high);
}
}
bool CheckMoreThanHalfNum(int arr[],int length,int number)
{
int num = 0;
for(int i=0;i<length;i++)
{
if(number == arr[i])
{
num++;
}
}
if(num*2 > length)
{
return true;
}
return false;
}
int MoreThanHalfNum(int arr[],int length)
{
if(arr == NULL || length < 0)
{
return -1;
}
int middle = length>>1;
int low = 0;
int high = length-1;
int mid = Partiton(arr,low,high);
while(middle != mid)
{
if(middle > mid)
{
low = mid + 1;
mid = Partiton(arr,low,high);
}
else
{
high = mid - 1;
mid = Partiton(arr,low,high);
}
}
cout<<endl<<mid<<" "<<middle<<endl;
int result = -1;
if(CheckMoreThanHalfNum(arr,length,arr[middle])==true)
{
result = arr[middle];
}
return result;
}
int main()
{
int numbers[] = {1, 2, 3, 2, 4, 2, 5, 2, 3};
cout<<MoreThanHalfNum(numbers,sizeof(numbers)/4)<<endl;
QuickSort(numbers,0,sizeof(numbers)/4);
for(int i=0;i<sizeof(numbers)/4;i++)
{
cout<<numbers[i]<<" ";
}
return 0;
}
面试题29:数组中出现次数超过一半的数字
最新推荐文章于 2021-04-28 12:33:36 发布