有一些公司招聘時還在用這個題目,但是網上流傳的**有問題,所以有必要發一篇博文。解決這個問題的演算法有很多種,最巧妙的演算法思路我提一嘴。該演算法充分利用了核心值特性(也就是出現次數超過一半的值),利用兩個輔助變數corenum,count。corenum用於臨時儲存陣列中的資料,count用於儲存某個數出現的次數。開始時corenum儲存陣列中的第乙個數,count為0,如果陣列出現的數於corenum相等,則count加1,否則就減1。如果count為0,就把當前陣列中的數賦給corenum,count設為1。因為指定的數出現的次數大於陣列長度的一半,所有count++與count--相抵消之後,最後count的值是大於1的,corenum中存的那個數就是出現最多的那個數。小於1,則返回-1,表示沒有找到corenum。當等於1時,需要進行特殊檢查。網上流傳的**有問題,對於形如。這樣的資料其實是無解的。但網上流傳的**會返回4。
發現該問題後,我做了一些簡單粗暴的改進,也是當count為1時,再次線性掃瞄一遍來做最終的驗證。
class program
;static int searchcorenum(int nums)
int corenum = 0, count = 0;
for (int i = 0; i < nums.length; i++)
else
}if (count > 1)
return corenum;
else if (count == 1)
else
return -1;
}static void main(string args)
}
找出一堆數中個數超過一半的數
問題描述 一堆數 例如6,2,2,6,3,4,6,6,6,6 總共10個,其中 6 的個數超過總數的一半5,找出這個個數超過過半的那個數。思路 從頭到尾遍歷,兩個數相同接著往後遍歷 否則刪掉這兩個數,接著往後遍歷。因為所找的那個數過半,所以不同的數相抵,抵消掉最後還會至少剩下乙個那個要找的數。圖示 ...
自學Python之 查詢個數大於總長度一半的數
構成 usr bin python coding utf 8 a 5,4,1,1,1,1,1,1,2,1,1,1,1,1,1,1,3,3,3,3,3,3,3 i 0 while i len a time a.count a i count 統計每次傳入引數出現的次數 if time len a 2 ...
尋找無序陣列中個數超過一半的那個數
描述 陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。輸入 第一行 陣列長度 第二行 陣列元素 輸出整數 例項輸入 5 1 2 3 4 4 4 4 例項輸出 解題思路 解法一 排序,輸出陣列一半的值 public static void main string args arrays....