乙個陣列元素的眾數是指非空陣列中出現次數超過⌊n
/2⌋ 這個題目有很多種解法,但是考慮到眾數超過陣列元素一半的這一特性,我們能使其演算法複雜度降到o(
n),空間複雜度降到o(
1)。利用這一特性的關鍵是該眾數元素出現的次數比其他元素出現的次數之和還要多,所以我們可以拿其出現的次數與其他元素出現次數在搜尋的時候進行比較(又一次運用神奇的數字0),具體的演算法如下:
class solution
else
if(answer==nums[i])
else count--;
}return answer;}};
上述演算法中將首元素認為是中眾數元素,計數為1,然後每次向後搜尋就比較搜尋到的元素是不是眾數元素,是的話計數+1,否則計數-1,如果計數減為0說明原設定的眾數元素可能不是真正的眾數元素,並將眾數元素設為剛搜尋的數。一直迴圈到搜尋結束,由於眾數元素出現的次數比其他元素出現的次數之和還要多,所以最終的計數一定會大於0而相應的最後的眾數元素一定是真正的眾數元素。
上述演算法提交執行結果如下:
陣列的眾數問題的分治解法
問題描述 給定含有n個元素的多重集合s,每個元素在s中出現的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。程式設計任務 對於給定的由n個自然數組成的多重集s,程式設計計算s的眾數及其重數。資料輸入 輸入資料由檔名為input.txt的文字檔案提供。...
查詢第k小的元素 O n 遞迴解法
今天分享乙個小技巧,雖然是小技巧但是還是很有價值的,曾經是微軟的面試題。題目是這樣的,乙個無序的陣列讓你找出第k小的元素,我當時看到這道題的時候也像很多人一樣都是按普通的思維,先排序在去第k個,但是當陣列非常大的時候,效率不高,那有沒有簡單的方法了,其實我們早就學過,只是我們不善於思考和變通。很多人...
查詢第k小的元素 O n 遞迴解法
今天分享乙個小技巧,雖然是小技巧但是還是很有價值的,曾經是微軟的面試題。題目是這樣的,乙個無序的陣列讓你找出第k小的元素,我當時看到這道題的時候也像很多人一樣都是按普通的思維,先排序在去第k個,但是當陣列非常大的時候,效率不高,那有沒有簡單的方法了,其實我們早就學過,只是我們不善於思考和變通。很多人...