【剑斩OFFER】算法的暴力美学——点名

一、题目描述

二、算法原理

当我们看到这道题目时,我们一般是直接从题目给出的数组来找这些数字的规律,题目给出的数字的除了这些数字是逐渐递增的,就没了。所以我们不防从把数组的下标写出来,此时我们可以看到数组的数字和下标相等时,代码没有数字缺少,反之就是缺少一个数字;从数组的下标结合题目给出的数组来看,只要找缺少数字的那小部分的数组的最左边就是缺少的那个数字,当然缺少的不是上面绿色部分的8而是他的下标7。

思路:二分查找的最左端的二分查找的模板

当数组的中间点处于蓝色部分的数字时,让left往mid的后面找,不包含 mid :

if:nums[ mid ] - mid == 0 ,left = mid + 1

else :right = mid

循环条件:left < right

求中点的方式:int mid = left + ( right - left )/2

特殊情况:

解决方法:left == records[ left ] ,表明里面没有数组里面没有缺少的数字,但是题目要求我们至少要一个数字缺少,所以:return recordes[ left ] + 1

三、代码实现

cpp 复制代码
class Solution {
public:
    int takeAttendance(vector<int>& records) {
        int left = 0, right = records.size() - 1;
        while(left < right)
        {
            int mid = left +  (right - left)/2;
            if(records[mid] - mid) right = mid;
            else left = mid + 1;
        }
        if(left == records[left]) return records[left] + 1;//处理特殊情况
        return left;
    }
};
相关推荐
迷途之人不知返3 小时前
数据结构之,栈与队列
数据结构
MATLAB代码顾问3 小时前
多种时间序列预测算法的MATLAB实现
开发语言·算法·matlab
高山上有一只小老虎4 小时前
字符串字符匹配
java·算法
愚润求学5 小时前
【动态规划】专题完结,题单汇总
算法·leetcode·动态规划
MOONICK5 小时前
数据结构——哈希表
数据结构·哈希算法·散列表
林太白5 小时前
跟着TRAE SOLO学习两大搜索
前端·算法
ghie90905 小时前
图像去雾算法详解与MATLAB实现
开发语言·算法·matlab
云泽8086 小时前
从三路快排到内省排序:探索工业级排序算法的演进
算法·排序算法
weixin_468466856 小时前
遗传算法求解TSP旅行商问题python代码实战
python·算法·算法优化·遗传算法·旅行商问题·智能优化·np问题