leetcode 1287. 有序数组中出现次数超过25%的元素

leetcode 1287. 有序数组中出现次数超过25%的元素


题目描述

  1. 有序数组中出现次数超过25%的元素

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

请你找到并返回这个整数

示例:

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

提示:

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

解题思路

法1

方法1:滑窗

使用滑动窗口的概念。

我们首先计算了一个阈值,即数组元素总数的四分之一。

然后我们遍历数组,比较当前元素与距离为阈值的后续元素是否相等。

如果找到这样的一对元素,说明其中一个整数的出现次数超过了25%。我们直接返回这个整数。

  • 时间复杂度(O(N))
  • 空间复杂度(O(1))

执行结果

法1
func findSpecialInteger(arr []int) int {
    threshold := len(arr) / 4
    for i := 0; i < len(arr)-threshold; i++ {
        if arr[i] == arr[i+threshold] {
            return arr[i]
        }
    }
    return -1 // 如果找不到符合条件的整数,返回-1或者其他合适的值
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 8 ms , 在所有 Go 提交中击败了 92.98% 的用户 内存消耗: 4.8 MB , 在所有 Go 提交中击败了 63.16% 的用户 通过测试用例: 25 / 25 炫耀一下:



本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值