多數投票演算法

2021-07-30 18:06:51 字數 1626 閱讀 6092

**多數投票演算法**

在乙個陣列中,元素個數為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 演算法核心思想是...