Leetcode 1287:有序数组中出现次数超过25%的元素(超详细的解法!!!)
in leetcode with 0 comment

Leetcode 1287:有序数组中出现次数超过25%的元素(超详细的解法!!!)

in leetcode with 0 comment

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

请你找到并返回这个整数

示例:

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

提示:

解题思路

这个问题首先不难想到暴力解法,也就是先将所有元素统计一遍,然后出现次数最多的元素是不是大于25%即可。在python中使用Counter().most_common(1)即可。

class Solution:
    def findSpecialInteger(self, arr: List[int]) -> int:
        return collections.Counter(arr).most_common(1)[0][0]

这个问题更好的解法是通过二分法(题目中所给条件是有序整数数组),在python中使用bisect的包即可。那么我们是不是需要遍历所有的元素呢?并不需要。我们只需要每1/4位置抽取一个元素,然后判断其是否符合条件即可(之所有可以这样做,是因为数组有序)。

class Solution:
    def findSpecialInteger(self, arr: List[int]) -> int:
        n = len(arr)
        for i in range(0, n, n//4 + 1):
            if bisect.bisect(arr, arr[i]) - bisect.bisect_left(arr, arr[i]) > n//4 : 
                return arr[i]

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

「如果我的文章对你有很大帮助,那么不妨~!」

coordinate

谢谢老板O(∩_∩)O~

使用微信扫描二维码完成支付

Responses