陣列的主元素查詢

2022-08-10 20:12:14 字數 1237 閱讀 7501

描述

已知乙個整數序列a=(a0, a1,…an-1),其中0≤ain/2(0≤pk輸入

多組資料,每組資料兩行。第一行為乙個整數n,代表陣列中有n個元素。第二行為陣列中的n個元素(元素之間用空格分隔)。當n等於0時,輸入結束。

輸出每組資料輸出一行,若陣列中存在主元素,輸出主元素的值,若陣列中不存在主元素,則輸出-1。

輸入樣例 1 

8

0 5 5 3 5 7 5 5

90 5 5 3 5 1 5 7 0

0

輸出樣例 1

5

-1

演算法思路: 即求陣列中最多數的問題,再加一步判斷看c是否》n/2.

該演算法的基本思想就是從前向後掃瞄陣列元素,標記出乙個可能成為主元素的元素num,然後重新計數,確認num是否是主元素。

1、選取候選的主要元素:依次掃瞄所給陣列中的每乙個整數,將第乙個遇到的整數num儲存到c中,記錄num出現的次數為1,若遇到的下乙個整數仍等於num,則計算器加1,否則計數器減1,當計數器減到0時,將遇到的下乙個整數儲存到c中,計數重新記為1,開始新一輪計數,即從當前位置開始重複上述過程,直到掃瞄完全部元素。

2、判斷c中元素是否是真正的主元素:再次掃瞄該陣列,統計c中元素出現的次數,若大於n/2,則為主元素,否則序列中不存在主元素。

演算法核心**:

int major(int a, int

n) }

}count = 0

;

for (int i = 0; i < n; i++)

if (count > n / 2

)

return

c;

else

return -1

;}

本題提交**:

#includeusing

namespace

std;

int major(int a, int

n) }

}count = 0

;

for (int i = 0; i < n; i++)

if (count > n / 2

)

return

c;

else

return -1;}

intmain()

}

陣列的主元素查詢

描述 已知乙個整數序列a a0,a1,an 1 其中0 ain 2 0 pk注意學習這裡用陣列儲存另乙個陣列相同元素資訊的方法。include define maxsize 100 using namespace std 陣列中某數相等的數過半,稱之為主要元素 好好學習此方法 void mainel...

求陣列主元素的O n 演算法

在乙個規模為n的陣列a n 中,所謂主元素就是出現次數大於n 2的元素,例如 3.3.4.2.4.4.2.4.4 有乙個主元素為4。充分利用主元素的出現次數大於n 2這個已知條件,因為主元素的出現次數大於n 2,所以容易證明下面的解法是正確的 首先假設主元素是x,則遍歷陣列時出現與x相等的元素時,x...

陣列元素查詢

本方法目標是找出給定陣列中指定兩標記之間的元素,實現 如下 功能 找出給定陣列中指定兩標記之間的元素 param original 原始資料 param startlabel 頭標記 param endlabel 尾標記 public static void findbetween string o...