LeetCode 9 求衆數

求衆數 - LeetCode

問題描述

  • 給定一個大小爲 n 的數組,找到其中的衆數。衆數是指在數組中出現次數大於 ⌊ n/2 ⌋ 的元素。
  • 你可以假設數組是非空的,並且給定的數組總是存在衆數。

示例 1:

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

示例 2:

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

問題分析

  第一種取巧,由於測試用例不大,設置一個小點的零列表,每出現一次數字,對應索引上加一
  第二種方法,讀取一個保留值,記錄當前可能衆數。設置一個數值記錄出現次數,同樣數字加一,不同減一,減到零時換保留值
  因爲衆數始終多餘一半,排序後中間的數即爲衆數

代碼

#偷雞方法
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        list=[0,0,0,0]
        for num in nums:
            list[num]=list[num]+1
        for x in range(4):
            if list[x]>len(nums)/2:
                return x   
#設置保留值方法
class Solution:
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        cnt, ret = 0, 0
        for num in nums:
            if cnt == 0:
                ret = num
            if num != ret:
                cnt -= 1
            else:
                cnt += 1
        return ret
#排序取值方法
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        return nums[int(len(nums)/2)]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章