1. 程式人生 > 其它 >LC 多數元素

LC 多數元素

技術標籤:演算法面試題彙總leetcode演算法資料結構

給定一個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列中出現次數大於⌊ n/2 ⌋的元素。

你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。

示例1:

輸入: [3,2,3]
輸出: 3
示例2:

輸入: [2,2,1,1,1,2,2]
輸出: 2

作者:力扣 (LeetCode)
連結:https://leetcode-cn.com/leetbook/read/top-interview-questions/xm77tm/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

1利用字典(遍歷計數)

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        l = len(nums)
        if l == 1:
            return nums[0]
        dic ={}
        for i in nums:
            if i not in dic.keys():
                dic[i] = 1
            else:
                dic[i] += 1
                if(dic[i]>l/2):
                    return i

2先排序(適用於給定的陣列總是存在多數元素,中位數即多數元素)

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        return nums[len(nums)//2] 

3投票法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        count , candi = 0, 0
        for i in nums:
            if i == candi:
                count += 1
            else:
                if count == 0:
                    candi = i
                    count = 1
                else:
                    count -= 1
        return candi