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

2021-09-24 14:15:04 字數 774 閱讀 3350

題目描述

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

方法一:hashmap統計次數

這種方法需要申請額外空間,在使用hashmap存入鍵值對後還需要進行遍歷找到結果,複雜度太高,不建議使用

方法二:

在遍歷陣列的時候,先指定乙個守衛者,碰到不相同的敵人就兩者同歸於盡,數量-1,碰到與他相等的元素那就數量+1,如果總是碰到不相等的敵人,當數量-1到0時,那麼重新指定。如果這個元素存在,那麼最後剩下來的守衛者就是超過一半的元素,因為人多的才能相互抵消完不同的元素。所以按照此思路可以設定兩個引數:

乙個是current 用來臨時儲存陣列中的資料

乙個是flag用來儲存某個數字出現的次數

遍歷陣列,當flag>0時,相同元素flag++,不同元素flag++,flag==0時,重新指定當前元素,並將flag重新設定為1。找到次元素返回,否則返回0,**如下:

public class morehalfnum ;

system.out.println(morehalfnum.morehalfnum(arr));

}public static int morehalfnum(int arr) else

}//如果這個數是存在的,那麼其實直接返回current就行

if (flag>=arr.length/2)

return 0;

}}

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

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。輸入 每個測試案例包括2行 第一行輸入乙個整數n 1 n 100000 表...

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

陣列中出現次數超過一半的數字 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。class solution count 0 for auto i numbers if i k ...

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

題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解題思路 將陣列按大小排序,若存在數字出現次數超過陣列長度的一般,則陣列中位數必定為該數字 1 將陣列排序完成後,取a...