**多數投票演算法**
在乙個陣列中,元素個數為n,獲得元素出現次數大於n/2的數,如果有滿足條件的數,輸出該數;沒有滿足條件的數,輸出-1。(使用lua實現該演算法)
**普通思路:**
1:遍歷該陣列,將陣列中出現的每個數儲存在table表count中
2:設定result為-1表示需要返回的數,遍歷count,將出現的次數和n/2比較,大於的話,則將值複製給result
3:返回result,即為結果
****如下:**
local test =
function majorityelement( data )
local count = {}
for i, v in pairs(data) do
count[v] = (count[v] or 0) + 1
endlocal max = #data
local result = -1
for i, v in pairs(count) do
if (v * 2) > max then
result = i
break
endend
return result
endprint("the result is : ", majorityelement(test))
**執行結果如下:**
the result is : -1
**演算法思路:**
1:乙個變數result表示所求的元素,cout表示統計的個數,將count初始位0
2:第一遍遍歷,找到可能滿足條件的元素,並複製給result
1):遍歷data,如果count == 0,則將數值賦予result,count設為1
2):如果count不為0,遍歷的值和result相同,則count加1,否則count減1
3:第二遍遍歷,將count設為0,如果遍歷的值和result相同,則count加1,否則count減1
4:如果count <= 0的話,說明沒有滿足條件的元素,返回-1,否則返回result。
****如下:**
local test =
function majorityelement_2( data )
local result = -1
local count = 0
for i, v in pairs(data) do
if count == 0 then
result = v
count = 1
else
count = (v == result) and (count + 1) or (count - 1)
endend
count = 0
for i, v in pairs(data) do
count = (v == result) and (count + 1) or (count - 1)
endreturn count <= 0 and -1 or result
endprint("the result is : ", majorityelement_2(test))
**執行結果如下:**
the result is : -1
多數投票法
找出乙個陣列 現次數超過一半的數字,例如 2 0 3 0 1 0 0 0 0 0 1 這個陣列中,出現次數最多的是 0,並且超過了一半。所以應該是0.解決思路 最簡單的思路,每個數字出現了之後就記錄一下,找到之前有沒有出現過,有的話就次數加1 這個裡面有個小問題是,如果數字很多的話,要找到之前有沒有...
leetCode 169 多數元素 多數投票
給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。1.雜湊表存一遍,再遍歷找到出現次數大於 n 2 的元素。2.對陣列進行排序 中間的一定是出現次數大於 n 2 的元素。3.多數投票演算法 定義乙個...
摩爾投票法和大多數
摩爾投票演算法 假設有這樣乙個場景 票選村長,每人可投一票,我們將候選村長從1開始編號,村民們在票上寫上候選村長的編號即可完成投票。那麼最後統計的票可形成乙個整型陣列。那麼誰是村長呢?票數過半的那個人。摩爾投票演算法可以快速的計算出乙個陣列 現次數過半的數即大多數 majority 演算法核心思想是...