分治法找到数组中出现次数超过一半的元素
题目描述
分治法找到数组中出现次数超过一半的元素
输入格式:
1.数组元素个数
2.元素值
输入样例:
5
1 2 1 1 4
输出样例:
1
#include<stdio.h>
int findCandidate(int arr[], int n) {
int candidate=arr[0];
int count =1;
for (int i=1;i<n;i++) {
if (arr[i]==candidate) {
count++;
} else {
count--;
}
if (count ==0) {
candidate=arr[i];
count = 1;
}
}
return candidate;
}
int findMajorityElement(int arr[], int n) {
int candidate = findCandidate(arr,n);
int count = 0;
for (int i=0;i<n;i++) {
if (arr[i]==candidate) {
count++;
}
}
if (count>n/2) {
return candidate;
} else {
return -1;
}
}
int main(){
//请在此处开始编写你的代码
int n;
scanf("%d",&n);
int arr[n];
for (int i=0;i<n;i++) {
scanf("%d",&arr[i]);
}
int majorityElement=findMajorityElement(arr,n);
if (majorityElement!=-1) {
printf("The majority element in the array is:%d\n",majorityElement);
} else {
printf("There is no majority element in the array.\n");
}
return 0;
}