算法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;
    }
}
相关推荐
2401_832131953 分钟前
模板编译期机器学习
开发语言·c++·算法
嵌入小生0073 分钟前
Data Structure Learning: Starting with C Language Singly Linked List
c语言·开发语言·数据结构·算法·嵌入式软件
ValhallaCoder6 分钟前
hot100-子串
数据结构·python·算法
ygklwyf9 分钟前
无向图的连通性之割点/边,点/边双连通分量
算法·无向图·圆方树
2401_8384725110 分钟前
单元测试在C++项目中的实践
开发语言·c++·算法
naruto_lnq16 分钟前
移动语义与完美转发详解
开发语言·c++·算法
MicroTech202525 分钟前
自适生长的点云智能:MLGO微算法科技基于双阈值与DDM的仿生式配准算法
科技·算法
yunsr34 分钟前
python作业1
开发语言·python·算法
清铎43 分钟前
项目_华为杯’数模研赛复盘_第二问
深度学习·算法·机器学习
v_for_van1 小时前
力扣刷题记录1(无算法背景,纯C语言)
算法·leetcode·职场和发展