陣列的主元素查詢
描述
已知一個整數序列A=(a0, a1,…an-1),其中0≤ai<n(0≤i<n)。若存在ap1=ap2…=apm=x 且m>n/2(0≤pk<n,1≤k≤m),則稱x為A的主元素。例如A=(0,5,5,3,5,7,5,5),則5為主元素;又如A=(0,5,5,3,5,1,5,7),則A中沒有主元素。假設A中的n個元素儲存在一個一維陣列中,請設計一個儘可能高效的演算法,找出A的主元素。若存在主元素,則輸出該元素;否則輸出-1。
輸入
多組資料,每組資料兩行。第一行為一個整數n,代表陣列中有n個元素。第二行為陣列中的n個元素(元素之間用空格分隔)。當n等於0時,輸入結束。
輸出
每組資料輸出一行,若陣列中存在主元素,輸出主元素的值,若陣列中不存在主元素,則輸出-1。
輸入樣例 1
8
0 5 5 3 5 7 5 5
9
0 5 5 3 5 1 5 7 0
0
輸出樣例 1
5
-1
注意學習這裡用陣列儲存另一個陣列相同元素資訊的方法。
#include<iostream>
#define MAXSIZE 100
using namespace std;
//陣列中某數相等的數過半, 稱之為主要元素
//好好學習此方法
void MainElem(int *a,int num)
{
int count[100]={0};//全部初始化為0,用於儲存陣列A中每個數的個數
int i,max,mainelem;
for(i=0;i<num;i++)
count[a[i]]++;
max=count[a[0]];
mainelem=a[0];
for(i=0;i<num;i++)
{
if(max<count[a[i]])
{
max=count[a[i]];
mainelem=a[i];
}
}
if(max>num/2)
cout<<mainelem<<endl;
else
cout<<"-1"<<endl;
}
int main()
{
int a[MAXSIZE];
int num;//陣列長度
while(1)
{
cin>>num;
if(num==0)
break;
else
{
for(int i=0;i<num;i++)
cin>>a[i];
MainElem(a,num);
}
}
return 0;
}
相關文章
- js查詢陣列元素位置JS陣列
- 查詢陣列中第K大的元素陣列
- 【Java】陣列二分查詢元素Java陣列
- Javascript刷題 》 查詢陣列元素位置JavaScript陣列
- Java中查詢陣列多數元素的4種方法Java陣列
- 【LeetCode-陣列】查詢大多數元素LeetCode陣列
- 微策略面試題:在旋轉後的陣列中查詢元素(二分查詢)面試題陣列
- JS能力測評經典題--查詢陣列元素位置JS陣列
- 二維陣列查詢陣列
- JavaFX教程-查詢陣列Java陣列
- JavaScript專題之學underscore在陣列中查詢指定元素JavaScript陣列
- 二維陣列中的查詢陣列
- JavaScript --二維陣列查詢一維陣列JavaScript陣列
- Java陣列排序和查詢Java陣列排序
- 陣列使用find查詢用法陣列
- Excel查詢兩列資料相同的元素Excel
- MongoDB(12)- 查詢嵌入文件的陣列MongoDB陣列
- 【JZOF】二維陣列中的查詢陣列
- 在排序陣列中查詢元素的第一個和最後一個位置排序陣列
- MongoDB之資料查詢(陣列)MongoDB陣列
- 陣列中查詢給定值陣列
- 查詢提示;及重排陣列分析陣列
- 在一個長度為n的不同元素的陣列中順序查詢元素x,查詢成功時的平均比較次數為多少陣列
- Mongodb內嵌陣列的完全匹配查詢MongoDB陣列
- 九度 二維陣列中的查詢陣列
- 面試題——二維陣列中的查詢面試題陣列
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- 在靜態類中定義一個泛型方法查詢陣列元素泛型陣列
- 陣列的查詢(搜尋):線性查詢和二分法查詢陣列
- 陣列元素逆序陣列
- java陣列元素的引用Java陣列
- 陣列元素的數量陣列
- MYSQL A、B表陣列關聯查詢MySql陣列
- 【劍指offer】二維陣列中的查詢陣列
- 九度 1384 二維陣列中的查詢陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- 34. 在排序陣列中查詢元素的第一個和最後一個位置(中)排序陣列
- MongoDB查詢(陣列、內嵌文件和$where)MongoDB陣列