当前位置:   article > 正文

leetcode 二分查找·系统掌握 第k个缺失的正整数

leetcode 二分查找·系统掌握 第k个缺失的正整数

题目:

题解:

一种可行的办法是从1开始枚举num并不断在arr中二分查找该值,返回没有找到的第k个元素对应的num即可。

  1. int findKthPositive(vector<int>& arr, int k) {
  2. int cnt=0;
  3. int num=0;
  4. int l=0,r=arr.size()-1,mid;
  5. while(cnt!=k){
  6. num++;
  7. l=l,r=arr.size()-1;
  8. while(l<=r){
  9. mid=(l+r)>>1;
  10. if(arr[mid]==num)break;
  11. else if(arr[mid]>num)r=mid-1;
  12. else l=mid+1;
  13. }
  14. //只有在普通二分查找失败时才执行
  15. if(arr[mid]!=num)cnt++;
  16. }
  17. return num;
  18. }

题后反思:

泛型二分查找一样,普通二分查找也有需要查找失败的情况。但是和泛型二分查找不同,查找结果在mid中而泛型二分查找结果在 l 和 r 中。只需要增大普通二分查找的 r l mid 的作用域即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/776996
推荐阅读
相关标签
  

闽ICP备14008679号