You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

面试算法题:判断有序数组中是否存在出现次数超n/4的元素

有序数组元素出现次数超n/4的解法探讨

面试问题

给定一个包含n个元素的有序数组(n为4的倍数),返回是否存在某个元素的出现次数超过n/4次。

初始解法

我最初的思路是遍历数组并维护计数器,代码如下:

limit = len(nums) // 4
counter = 1

for i in range(1, len(nums)):
    if nums[i] == nums[i-1]:
        counter += 1

        if counter > limit:
            return True
    else:
        counter = 1

return False

面试官的提示与后续解法

面试官询问是否有更优解法,我想到有序数组可以用二分查找,但毫无头绪。几分钟后面试官给出提示:“若存在i使得nums[i] == nums[i + len(nums)/4],是否应返回true?”

事后我想到了滑动窗口解法,代码如下:

limit = len(nums) // 4

for i in range(limit, len(nums)):
    if nums[i] == nums[i-limit]:
        return True

return False

疑问

请问这个滑动窗口解法是否符合面试官的意图?另外是否存在更优的低于线性复杂度的解法?


内容的提问来源于stack exchange,提问作者Nab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:12:10