1539. 第 k 个缺失的正整数

解题思路

1.知识点

  • 方法一:枚举
    思路与算法
    我们可以顺序枚举。
    枚举法
    由于数组是严格递增的,所以可以认为一个不缺失的数组是从1开始的:nums = [1,2,3,4,…].我们可以从头遍历arr数组,并以不缺失数组为基准进行对比,具体来说:
    初始化基准 pivot = 1,并令i = 1从头遍历数组arr。
    若当前arr[i] == pivot,说明当前i位置之前都不缺元素,继续向后遍历i++,
    否则说明缺失正整数pivot,用一个变量count记录已经找到的缺失个数,count++,直到找到第k个缺失的正整数。

  • 变量注解
    var count = 0 // 缺失个数
    var pivot = 1 // 当前应该出现的数
    var index = 0 // 数组指针

2.代码

object Solution {
    def findKthPositive(arr: Array[Int], k: Int): Int = {
    var count = 0
    var pivot = 1
    var index = 0
    while (count<k){
      if(arr(index)==pivot){
        if((index+1<arr.length)){
          index = index+1
        }else index = index
      } else count=count+1
      pivot=pivot+1
    }
    return pivot-1
  }
}

3.复杂度

  • 时间复杂度: O(n+k), n是数组长度,k是最坏情况下遍历完数组还没有缺失,则还需要再对count累加k次.
  • 空间复杂度: O(1),仅使用常数空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值