【Leetcode 数组】 有序数组中出现次数超过25%的元素(1287)

题目

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。

请你找到并返回这个整数

示例:

输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6

提示:

1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5

解答

# class Solution:
#     def findSpecialInteger(self, arr):
#         d = {}
#         length = len(arr)
#         fo = length // 4 + 1
#         for x in arr:
#             if x in d:
#                 d[x] += 1
#                 if d[x] >= fo:
#                     return x
#             else:
#                 d[x] = 1
#         return x


# 不用额外空间
class Solution:
    def findSpecialInteger(self, arr):
        if len(arr) == 1:
            return arr[0]

        length = len(arr)
        result, cnt = arr[0], 1
        for x in range(1, length):
            if arr[x] == result:
                cnt += 1
                if cnt*4 > length:
                    return result
            else:
                result = arr[x]
                cnt = 1


s = Solution()
ans = s.findSpecialInteger([1, 2, 2, 6, 6, 6, 6, 7, 10])
print(ans)
# 6
posted @ 2019-12-31 11:58  961897  阅读(226)  评论(0编辑  收藏  举报