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

2021-09-22 21:08:33 字數 697 閱讀 4384

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

思路一:陣列排序後,如果符合條件的數存在,則一定是陣列中間那個數。(比如:1,2,2,2,3;或2,2,2,3,4;或2,3,4,4,4等等)

這種方法雖然容易理解,但由於涉及到快排sort,其時間複雜度為o(nlogn)並非最優;

class solution 

};

思路二:如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。

在遍歷陣列時儲存兩個值:一是陣列中乙個數字,一是次數。遍歷下乙個數字時,若它與之前儲存的數字相同,則次數加1,否則次數減1;若次數為0,則儲存下乙個數字,並將次數置為1。遍歷結束後,所儲存的數字即為所求。然後再判斷它是否符合條件即可。(時間複雜度為o(n))

class solution 

};

class solution 

}// verifying

count = 0;

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

if (count * 2 > n) return num;

return 0;

}};

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

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。2.1 方法一 基於partition函式的時間複雜度為o n 的演算法 class solution swap numbers i 1 numbe...

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

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5詞,超過陣列長度的一半,因此輸出2.思路 1,如果對陣列排序,那麼n 2對應的數一定是超過一半的數字 前提是存在這個數字 即長度為n的陣列中第n 2大的數字,o n 2,根據陣列...

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

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