陣列的主元素查詢
描述
已知一個整數序列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;
}
相關文章
- 查詢陣列中第K大的元素陣列
- 【LeetCode-陣列】查詢大多數元素LeetCode陣列
- 【Java】陣列二分查詢元素Java陣列
- Java中查詢陣列多數元素的4種方法Java陣列
- JS能力測評經典題--查詢陣列元素位置JS陣列
- JavaScript專題之學underscore在陣列中查詢指定元素JavaScript陣列
- 二維陣列查詢陣列
- 二維陣列中的查詢陣列
- Excel查詢兩列資料相同的元素Excel
- 【JZOF】二維陣列中的查詢陣列
- MongoDB(12)- 查詢嵌入文件的陣列MongoDB陣列
- 在排序陣列中查詢元素的第一個和最後一個位置排序陣列
- 陣列中查詢給定值陣列
- 陣列的查詢(搜尋):線性查詢和二分法查詢陣列
- 陣列元素逆序陣列
- 陣列元素的數量陣列
- java陣列元素的引用Java陣列
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- MYSQL A、B表陣列關聯查詢MySql陣列
- 【劍指offer】二維陣列中的查詢陣列
- 34. 在排序陣列中查詢元素的第一個和最後一個位置(中)排序陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- 在一個給定的陣列中查詢陣列中的最大元素是否至少是陣列中每個其他數字的兩倍, 如果是,則返回最大元素的索引,否則返回-1。陣列索引
- 【劍指offer】【1】二維陣列中的查詢陣列
- 陣列元素劃分陣列
- golang 陣列去重 移除陣列指定元素Golang陣列
- 陣列中每個陣列元素出現的次數陣列
- c++map 查詢元素和list查詢元素速度對比C++
- jQuery之元素查詢jQuery
- 查詢陣列中出現次數大於陣列長度一半的數字陣列
- 二維陣列中的查詢——牛客劍指offer陣列
- nowcoder-劍指offer-二維陣列的查詢陣列
- 劍指 Offer 04. 二維陣列中的查詢陣列
- 樹狀陣列的區間查詢與區間修改陣列
- 查詢陣列裡資料刪除和增加的方法陣列
- mysql查詢語句陣列下標擷取MySql陣列
- 旋轉陣列中的最小元素陣列
- Laravel 查詢資料庫欄位內容是 Json 陣列時的查詢語句Laravel資料庫JSON陣列