算法024:点名

点名. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/que-shi-de-shu-zi-lcof/description/

要求这个题方法很多很多,比如哈希表,直接遍历、位运算、高斯求和(等数学方法)。

但是这一些时间复杂度都是O(N),而二分查找的时间复杂度则是O(1)。

此时,如果mid在5的左侧区间,那么让left = mid + 1;

如果mid在5以及5的右侧区间,那么让right = mid;

这样二分查找的整体代码就完成了。

但是还会出现一个特殊情况:

如果 数组为 1 2 3 4 ,舍去的数字是5,需要在这里加上一个判断,如果指针的数字等于指针的值,说明出现的就是这种情况。此时改成返回left即可,而不是left + 1。

代码:

java 复制代码
class Solution {
    public int takeAttendance(int[] records) {
        int left = 0;
        int right = records.length - 1;
        while(left < right){
            int mid = left + (right - left) / 2;
            if(records[mid] == mid){
                left = mid + 1;
            }else{
                right = mid;
            }
        }
        return records[left] == left ? left + 1 : left;
    }
}
相关推荐
呼啦啦啦啦啦啦啦啦23 分钟前
常见的排序算法
java·算法·排序算法
胡萝卜3.01 小时前
数据结构初阶:排序算法(一)插入排序、选择排序
数据结构·笔记·学习·算法·排序算法·学习方法
地平线开发者2 小时前
LLM 中 token 简介与 bert 实操解读
算法·自动驾驶
scx201310042 小时前
20250814 最小生成树和重构树总结
c++·算法·最小生成树·重构树
阿巴~阿巴~2 小时前
冒泡排序算法
c语言·开发语言·算法·排序算法
散1122 小时前
01数据结构-交换排序
数据结构·算法
yzx9910133 小时前
Yolov模型的演变
人工智能·算法·yolo
weixin_307779134 小时前
VS Code配置MinGW64编译SQLite3库
开发语言·数据库·c++·vscode·算法
无聊的小坏坏4 小时前
拓扑排序详解:从力扣 207 题看有向图环检测
算法·leetcode·图论·拓扑学
wwww.bo4 小时前
机器学习(决策树)
算法·决策树·机器学习