算法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;
    }
}
相关推荐
时艰.3 分钟前
JVM 垃圾收集器ParNew&CMS与三色标记算法
java·jvm·算法
zy_destiny5 分钟前
SegEarth-OV系列(二):面向遥感图像的无训练开放词汇分割
人工智能·深度学习·算法·机器学习·计算机视觉·语义分割·开放词汇
Coovally AI模型快速验证20 分钟前
Meta ShapeR重磅开源:多模态3D生成,从真实杂乱视频中稳健重建
人工智能·学习·算法·yolo·3d·人机交互
码农水水30 分钟前
美团Java面试被问:Netty的ByteBuf引用计数和内存释放
java·开发语言·数据库·mysql·算法·面试·职场和发展
zl_vslam43 分钟前
SLAM中的非线性优-3D图优化之绝对位姿SE3约束SO3/t形式(十八)
人工智能·算法·计算机视觉·3d
啊阿狸不会拉杆43 分钟前
《计算机操作系统》 - 第九章 操作系统接口
人工智能·算法·计算机组成原理·os·计算机操作系统
一起养小猫1 小时前
Flutter for OpenHarmony 实战:碰撞检测算法与游戏结束处理
算法·flutter·游戏
刃神太酷啦1 小时前
Linux 基础 IO 收官:库的构建与使用、进程地址空间及核心知识点全解----《Hello Linux!》(11)
java·linux·c语言·数据库·c++·算法·php
板面华仔1 小时前
机器学习入门(一)——KNN算法
人工智能·算法·机器学习
Three~stone1 小时前
Matlab R2024b 保姆级安装教程(附:解决win10问题)
开发语言·算法·matlab