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

递增序列中查找第K个缺失连续元素(运行超时问题求助)

解决递增序列中第K个缺失元素的超时问题

嘿,我来帮你搞定这个超时的麻烦!首先咱们明确下问题:给定一个严格递增的序列,要找出里面没出现的第K个连续缺失元素,如果不存在(也就是总缺失数小于K)就返回-1。你的代码超时大概率是用了暴力遍历的思路,咱们来换个更高效的方法。

为什么暴力法会超时?

如果你的代码是逐个遍历数组元素,计算相邻两个数之间的缺失数,然后累加直到找到第K个,那当数组长度N特别大(比如10^5级别),或者K也很大的时候,遍历整个数组的O(N)时间复杂度就会拖慢速度,尤其是当K比数组总缺失数还大时,还得遍历完才能判断返回-1,完全没必要。

优化方案:二分查找(O(logN)时间复杂度)

核心思路是:对于数组中第i个元素(下标从0开始),我们可以快速算出从数组第一个元素到它这里,总共缺失了多少个元素:
缺失数 = a[i] - a[0] - i
(解释下:正常情况下,从a[0]到a[i]应该有a[i]-a[0]+1个连续数,但实际只有i+1个元素,所以缺失数就是两者的差,化简后就是上面的公式)

我们要找到最小的i,使得这个缺失数 >= K,然后就能精准定位到第K个缺失元素的位置。具体步骤如下:

  • 先判断是否存在第K个缺失元素:计算整个数组的总缺失数total_missing = a[-1] - a[0] - (len(a)-1),如果total_missing < K,直接返回-1。
  • 二分查找定位区间:初始化左指针left=0,右指针right=len(a)-1。
  • 缩小查找范围:
    • 当left < right时,取中间下标mid = (left + right) // 2
    • 计算mid位置的缺失数missing = a[mid] - a[0] - mid
    • 如果missing < K,说明第K个缺失元素在mid的右边,把left更新为mid + 1
    • 否则,把right更新为mid
  • 计算具体的缺失元素:找到left后,先算出left-1位置的总缺失数prev_missing = a[left-1] - a[0] - (left-1),那么第K个缺失元素就是a[left-1] + (K - prev_missing)

代码示例(Python)

def find_kth_missing(a, k):
    n = len(a)
    total_missing = a[-1] - a[0] - (n - 1)
    if total_missing < k:
        return -1
    
    left, right = 0, n - 1
    while left < right:
        mid = (left + right) // 2
        missing = a[mid] - a[0] - mid
        if missing < k:
            left = mid + 1
        else:
            right = mid
    
    # 计算前left-1位置的缺失数,然后算出第k个缺失元素
    prev_missing = a[left-1] - a[0] - (left-1)
    return a[left-1] + (k - prev_missing)

# 测试示例输入:N=5,K=2,数组[1,3,4,5,7]
print(find_kth_missing([1,3,4,5,7], 2))  # 输出6,正确

验证示例

咱们用你的示例走一遍流程:

  • 总缺失数:7-1-4=2,等于K=2,所以存在。
  • 二分查找过程:
    • left=0, right=4 → mid=2,缺失数=4-1-2=1 <2 → left=3
    • left=3, right=4 → mid=3,缺失数=5-1-3=1 <2 → left=4
    • 此时left=right=4,prev_missing=5-1-3=1,K-prev_missing=1 → 5+1=6,正好是答案。

这种方法把时间复杂度降到了O(logN),哪怕数组长度是10^6也能快速处理,完美解决超时问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:02:40