当前位置: 首页 > news >正文

Leetcode1287:有序数组中出现次数超过25%的元素

题目描述:

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

请你找到并返回这个整数。

代码思路:

  1. 初始化变量
    • n = len(arr):计算数组 arr 的长度。
    • diff = n // 4:计算一个间隔,这个间隔是数组长度的四分之一(向下取整)。由于我们要找的整数出现次数超过数组长度的 25%,所以这个间隔内的某个位置(或多个位置)很可能包含这个特殊整数。
  2. 遍历数组
    • 使用 for i in range(n - diff) 遍历数组,直到倒数第 diff 个元素。这是因为我们要比较当前元素 arr[i] 和它后面 diff 个位置的元素 arr[i + diff]
  3. 检查并返回结果
    • 在循环中,使用 if arr[i] == arr[i + diff] 检查当前元素和后面间隔 diff 个位置的元素是否相等。
    • 如果相等,说明找到了一个可能的特殊整数。由于数组是非递减有序的,且这个整数出现次数超过数组长度的 25%,那么在间隔 diff 内(或更长的范围内),这个整数会连续出现多次。因此,一旦找到这样的相等元素对,就可以直接返回 arr[i],因为它就是我们要找的特殊整数。

为什么这个方法有效

  • 由于数组是非递减有序的,所以相同的元素会连续出现。
  • 特殊整数的出现次数超过数组长度的 25%,即至少 n // 4 次(向下取整)。
  • 通过检查间隔 n // 4 的元素对,我们确保至少能够捕捉到特殊整数的一个连续出现区间。
  • 一旦找到这样的连续出现区间(即两个元素相等),由于数组的有序性,我们可以确信这个整数就是特殊整数。

代码实现:

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

 

相关文章:

  • Python学习心得Pycharm的程序调试
  • Unreal5从入门到精通之在编辑器中更新 UserWidgets
  • 从零复现R1之路[3/3]:一文速览Open R1——对DeepSeek R1训练流程前两个阶段的复现(SFT和GRPO训练)
  • 音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现
  • 51单片机-按键
  • 《仙台有树》追剧疑问与DeepSeek解答
  • LeetCode-633. 平方数之和
  • PHP图书借阅小程序
  • 当pcie设备变化时centos是否会修改网络设备的名称(AI回答)
  • GcExcel
  • Letsencrypt+certbot为域名免费配置ssl
  • 《Keras 3 :具有类似 U-Net 架构的图像分割》
  • 自定义RAG评估数据流
  • kotlin的onFailure: () -> Unit
  • 像素绽放PixelBloom(AiPPT.com) 联合创始人蒲世林:创新者的窘境就是新物种的机会
  • iOS 获取设备占用内存
  • C++17 数学特殊函数:探索标准库中的强大工具
  • 赶上AI的大潮:在VSCode中使用DeepSeek编程的极简方法
  • 解锁养生秘籍,拥抱健康生活
  • 网工项目理论1.9 广域网设计
  • 脱发后怎么把头发养回来?脱发自救指南来了
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感
  • 全过程人民民主研究基地揭牌,为推动我国民主政治建设贡献上海智慧
  • 释新闻|SEVIS是什么?在美留学生遭身份中止意味什么?
  • 解放日报头版:外资汽车产业链布局上海步伐明显加快
  • 上海车展迎来超百款首发新车,全市多区开展汽车促消费活动