1.数组排序,遍历数组,当元素发生跳变之前记录下元素的个数,如果大于数组的一半则返回该元素,否则继续遍历。

class Solution:
    def MoreThanHalfNum_Solution(self, numbers):
        # write code here
        count = 0
        sorted_nums = sorted(numbers)
        for i in range(len(sorted_nums)-1):
            count += 1
            if sorted_nums[i] != sorted_nums[i+1]:
                if count > len(sorted_nums)/2.0:
                    return sorted_nums[i]
                count = 0
        return numbers[0] if len(numbers) == 1 else 0

2.使用一个target来记录当前的访问的值,如果下一个值与该值相同则count++,否则count--。如果count=0时更换target的值为当前值。如果数组中存在大于个数大于数组一半的值,target就是该值。

class Solution:
    def MoreThanHalfNum_Solution(self, numbers):
        target = 0
        count = 0
        for num in numbers:
            # 当count为0时,重置target和count
            if count == 0:
                target = num
                count = 1
            elif num == target:
                count += 1
            else:
                count -= 1
        # 判断target是否大于数组的一半
        target_num = 0
        for num in numbers:
            if num == target:
                target_num += 1
        return target if target_num > len(numbers)/2.0 else 0