面試題29 陣列中出現次數超過一半的數字

2021-06-16 15:58:46 字數 813 閱讀 2687

題目:陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5詞,超過陣列長度的一半,因此輸出2.

思路:1,如果對陣列排序,那麼n/2對應的數一定是超過一半的數字(前提是存在這個數字),即長度為n的陣列中第n/2大的數字,o(n)

2,根據陣列特點,陣列中乙個陣列出現的次數超過陣列長度的一半,即它出現的次數比其他所有數字出現次數的和還要多。

因此,遍歷陣列時,保留兩個值,乙個是陣列中的乙個數字,乙個是次數。

當我們遍歷到下乙個數字的時候,如果下乙個數字和我們之前儲存的數字相同,則次數加1,;如果下乙個數字和我們之前儲存的數字不同,則次數減1,。如果次數為0,我們需要儲存下乙個數字,並把數字設為1,。由於我們要找的數字出現的次數比其他所有數字出現的次數還要多,那麼要找的數字肯定是最後一次把次數設為1時對應的數字。

演算法一:

源**:

#include "stdio.h"

int halfdata(int a,int len)

} }return b;

}void main()

else

}return a[index];

}void main()

; int len=9;

int result=halfdata(a,9);

printf("result:%d",result);

}

結果:

index1:0

result:2press any key to continue

面試題29 陣列中出現次數超過一半的數字

面試題29 陣列中出現次數超過一半的數字 題目 陣列中有乙個數字的出現次數超過了陣列長度的一半,找出這個數字。常規的演算法是先對陣列排序,排序的時間複雜度是o nlogn 如果和之前儲存的數字相同,次數加1 不同則次數減1.次數為0,則儲存下乙個數字並把次數設為1.我們要找 的數字就是最後一次把次數...

面試題29 陣列中出現次數超過一半的數字

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。這題要做出來比較簡單,但是要考慮優化就不那麼容易了。首先,寫個簡單的 class solution if iter num...

面試題25 陣列中出現次數超過一半的數字

方法一 先對陣列進行排序 再遍歷排序後的陣列,統計每個數 的次數 出現次數最大的數即為要找的數。時間複雜度 o nlogn o n o nlogn 不需要額外儲存空間 方法二 先對陣列進行排序 出現次數超過陣列長度的一半的數必然是 陣列中間的那個數 時間複雜度o nlgn o 1 o nlgn 不需...