劍指offer全集詳解python版——數組中出現次數超過一半的數字

題目描述:
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。

思路:

如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。在遍歷數組時保存兩個值:一是數組中一個數字,一是次數。遍歷下一個數字時,若它與之前保存的數字相同,則次數加1,否則次數減1;若次數爲0,則保存下一個數字,並將次數置爲1。遍歷結束後,所保存的數字即爲所求。然後再判斷它是否符合條件即可。

代碼:

# -*- coding:utf-8 -*-
class Solution:
    def MoreThanHalfNum_Solution(self, numbers):
        # write code here
        if not numbers:
            return 0
        nums = numbers
        flag = nums[0]
        count = 1
        for num in nums[1:]:
            if num == flag:
                count += 1
            else:
                count -= 1
                if count < 0:
                    flag = num
        count = 0
        for num in nums:
            if num == flag:
                count += 1
         
        if count > len(numbers) / 2:
            return flag
        return 0
發佈了71 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章