來自:【資料結構與演算法分析——c語言描述】練習2.19問題描述:
大小為 n 的陣列 a ,其主要元素是乙個出現次數超過 n/2 的元素(從而這樣的元素最多有乙個)。例如,陣列
3,3,4,2,4,4,2,4,4 有乙個主要元素4,而陣列
3,3,4,2,4,4,2,4 沒有主要元素。
題目給了一種遞迴的演算法,不過不太理解。看了幾位前輩的**之後換了思路。下面是我的理解:
第一步,尋找候選元素。遍歷陣列元素,獲得第乙個元素將其寫入ele,標記為1;接下來訪問下一元素,如果它與ele相等,標記+1,否則-1。當ele減小到0時,繼續讀入下一元素到ele,並將標記重設為1。繼續下去,直到最後乙個元素。此時,ele獲得出現次數最多的元素。
第二步,確定該元素是否主要元素。這個不難,用計數器統計該元素在陣列中的出現次數count。如果count超過半個陣列大小,該候選元素就是主要元素,返回即可;否則返回notfound。
時間複雜度顯然是o(n)。
int findcandidate(const int a, int n)else if (a[i] == ele)
mark++;
else
mark--;
}return ele;
}int findmajority(const int a, int n)
尋找陣列中的主要元素
對於乙個大小為n的整數陣列,將其中出現次數大於n 2的元素稱為主要元素,例如中主要元素是5,而中則沒有。似乎是乙個統計陣列元素出現次數的問題,因此尋找出現次數最多的元素的解法在這裡也適用。不過該問題有乙個特點 即要求元素出現次數過半。因此,如果存在這樣的主要元素x,將它與陣列所有元素進行比較,相等則...
陣列 在陣列中查詢元素
description 輸入10個整數到乙個長度為10的整型陣列中,然後輸入乙個整數,檢視該整數是否在剛才得到的陣列中,如果在,輸出 found 如果不在,輸出 not found input 11 個整數 output 如果第11個整數在前10個整數中,則輸出found 如果第11個整數不在前10...
6 6 在陣列中查詢指定元素
本題要求實現乙個在陣列中查詢指定元素的簡單函式。函式介面定義 int search int list,int n,int x 其中list是使用者傳入的陣列 n 0 是list中元素的個數 x是待查詢的元素。如果找到 則函式search返回相應元素的最小下標 下標從0開始 否則返回 1。裁判測試程式...