多數投票算法

**多數投票算法**
在一個數組中,元素個數爲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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章