算法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;
    }
}
相关推荐
ZhengEnCi15 分钟前
一亿条数据取前100条完全指南:从全量排序到分块流式最小堆的4种解法实测
python·算法·排序算法
zaizai100722 分钟前
STL深度剖析2
java·c++·算法
数智奔流34 分钟前
MiniMax的低价攻势,撞上“背题”疑云
前端·javascript·算法
青少儿编程课堂34 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:位运算实战——二进制权限与最大异或解析
c++·python·算法·bfs·信息学竞赛
广州智造36 分钟前
Radioss中破坏模型FAILTAB1的详细介绍
数据库·人工智能·算法·机器学习·仿真软件·radioss
青少儿编程课堂37 分钟前
2026蓝桥杯青少组图形化真题:校园飞机大战解析(全国青少年信息素养·电子学会图形化考级)
c++·python·算法·bfs·信息学竞赛
开开心心就好43 分钟前
证件照排版打印工具,免费可自定义尺寸
服务器·开发语言·算法·随机森林·pdf·音视频·散列表
lisw051 小时前
导数与机器学习优化!
算法·机器学习·数学建模
海绵宝宝转agent1 小时前
leetcodehot100个人题解
java·笔记·学习·算法
ZhengEnCi1 小时前
内存装不下怎么取 Top 100:外部排序与分布式 Top-K 的实测取舍
分布式·算法·排序算法