求陣列中出現次數大於陣列長度一半元素

2021-06-12 05:30:56 字數 537 閱讀 3164

最近聽參加今年研究生考試的同學說了這樣一道演算法題:已知乙個整數陣列,讓你判斷其中是否存在出現次數大於陣列長度一半的元素,如果存在的話輸出其中第一次出現該元素時陣列的下標;如果不存在的話,輸出-1。

這讓我想到了在《程式設計之美》上看到的乙個幾乎類似的題目——尋找發帖的「水王」。只不過《程式設計之美》上的題目相當於已知陣列中存在了出現次數大於陣列長度一半的元素,只需要找出該元素,而且上面給了乙個很巧妙的解法:每次刪除兩個不同的id(元素),在剩下的id中,水王的id仍然占多數。現在問題難度稍微加大了一點,就是不知道「水王」存不存在。似乎需要先判斷「水王」存不存在,再利用《程式設計之美》上的解法。但這樣的話,問題變成了如何判斷水王存不存在,仍然沒有很好的解法。那就換個思路,先假設水王一定存在,找到他之後再去驗證他是不是真的水王。

c**如下:

#include int a[7]=;

int is_super(int *a,int n)

int main(int arg,char *args)

求陣列長度

c 求陣列長度為 int arr length sizeof arr sizeof arr 0 為了方便使用,在c語言中常定義巨集來求陣列長度 define arr len array,length 使用時,直接呼叫巨集函式即可,如 int arr int len arr len arr,len 此...

C語言 求陣列中元素出現次數超過陣列長度一半的數

原理 設乙個變數儲存當前值。設乙個次數,當前值與下乙個值進行比較。假設相等,次數加一,假設不相等。次數減一。假設次數減到0了還是不相等,就把當前值替換掉。include include include include pragma warning disable 4996 int find half...

C 求陣列長度

c c 中沒有提供直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使用sizeof array sizeof array 0 在c語言中習慣上在 使用時都把它定義成乙個巨集,比如 define get arr...