28 陣列中出現次數超出一半的數字

2021-09-25 02:33:56 字數 653 閱讀 2420

題目描述

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

class solution 

};

1.可以使用map結構,建立key value 對映表

class solution 

return 0;

}};

2.對陣列進行排序,如果符合條件的數存在,則一定是陣列中間的那個數。

class solution 

};

3.如果有符合條件的數字,則這個數字出現的次數比其他所有數字出現的次數都要多。

可以採用陣地攻守的思想:

第乙個數字作為第乙個士兵,守陣地;count = 1;

遇到相同元素,count++;

遇到不相同元素,即為敵人,同歸於盡,count–;當遇到count為0的情況,又以新的i值作為守陣地的士兵,繼續下去,到最後還留在陣地上的士兵,有可能是主元素。

再加一次迴圈,記錄這個士兵的個數看是否大於陣列一般即可。

class solution 

};

28 陣列中出現次數超過一半的數

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解法一陣列排序後,如果符合條件的數存在,則一定是陣列中間那個數。比如 1,2,2,2,3 或2,2,2,3,4 或2,3,4,4...

28 陣列中出現次數超過一半的數字

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。思路 我們設定乙個用於記錄數字num出現次數的變數,如果陣列的下乙個元素等於當前num,那麼次數就加1,否則次數減1。如果次數減小...

陣列中出現次數超過一半的數

採用陣地攻守的思想 第乙個數字作為第乙個士兵,守陣地 count 1 遇到count為0的情況,又以新的i值作為守陣地的士兵,遇到相同元素,count 遇到不相同元素,即為敵人,同歸於盡,count 到最後還留在陣地上的士兵,有可能是主元素。記錄這個可能的主元素的個數是否大於陣列一半即可確定返回值。...