**多數投票算法**
在一個數組中,元素個數爲n,獲得元素出現次數大於n/2的數,如果有滿足條件的數,輸出該數;沒有滿足條件的數,輸出-1。(使用lua實現該算法)
**普通思路:**
1:遍歷該數組,將數組中出現的每個數保存在table表count中
2:設置result爲-1表示需要返回的數,遍歷count,將出現的次數和n/2比較,大於的話,則將值複製給result
3:返回result,即爲結果
**代碼如下:**
local test = {6,2,5,8,4,11,2,3,5,9,5,5,5,5,5,}
function majorityElement( data )
local count = {}
for i, v in pairs(data) do
count[v] = (count[v] or 0) + 1
end
local max = #data
local result = -1
for i, v in pairs(count) do
if (v * 2) > max then
result = i
break
end
end
return result
end
print("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 = {6,2,5,8,4,11,2,3,5,9,5,5,5,5,5,}
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)
end
end
count = 0
for i, v in pairs(data) do
count = (v == result) and (count + 1) or (count - 1)
end
return count <= 0 and -1 or result
end
print("the result is : ", majorityElement_2(test))
**運行結果如下:**
the result is : -1
多數投票算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.