点名(缺失的数字),剑指offer,力扣

目录

我们直接看题解吧:

审题目+事例+提示:

方法:

解题思路(二分法):

代码:

方法二:直接遍历


题目地址

LCR 173. 点名 - 力扣(LeetCode)

今天刷点名(缺失的数字),大家有兴趣可以点上看看题目要求,试着做一下

我们直接看题解吧:

审题目+事例+提示:

record为升序数组

方法:

遇到排序数组的搜索问题,首先想到二分法

解题思路(二分法):

依据题意,我们可以把数组分为两部分,

左子数组,record[i]=i

右子数组,record[i]!=i

所以,缺失的数字其实就是右子数组的首元素。

  1. 初始化i=0即左边界,j=length-1,即右边界
  2. 循环二分:当i<=j时跳出循环

·计算中点m=(i+j)/2(向下取整)

·record[m]==m,即缺失数字在[m+1,j],则i=m+1

·record[m]!=m,即缺失数字在[i,m-1],则j=m-1

3、最后跳出循环,i指向位置为缺失的数字

代码:

复制代码
class Solution {
    public int takeAttendance(int[] records) {
        int i = 0, j = records.length - 1;
        while(i <= j) {
            int m = (i + j) / 2;
            if(records[m] == m) i = m + 1;
            else j = m - 1;
        }
        return i;
    }
}

方法二:直接遍历

复制代码
class Solution {
    public int missingNumber(int[] nums) {
        if (nums[0]==1) return 0;
        for (int i = 0;i<nums.length;i++){
            if (nums[i]!=i) return i;
        }
        return nums.length;
    }
}
相关推荐
天赐学c语言14 分钟前
1.20 - x的平方根 && vector的扩容机制以及删除元素是否会释放内存
c++·算法·leecode
52Hz1181 小时前
力扣24.两两交换链表中的节点、25.K个一组反转链表
算法·leetcode·链表
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #160:相交链表(双指针法、长度差法等多种方法详细解析)
算法·leetcode·链表·双指针·相交链表·长度差法
ValhallaCoder1 小时前
Day53-图论
数据结构·python·算法·图论
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #84:柱状图中最大的矩形(单调栈、分治法等四种方法详细解析)
算法·leetcode·动态规划·单调栈·分治法·柱状图最大矩形
C雨后彩虹2 小时前
羊、狼、农夫过河
java·数据结构·算法·华为·面试
重生之后端学习2 小时前
19. 删除链表的倒数第 N 个结点
java·数据结构·算法·leetcode·职场和发展
aini_lovee2 小时前
严格耦合波(RCWA)方法计算麦克斯韦方程数值解的MATLAB实现
数据结构·算法·matlab
安特尼3 小时前
推荐算法手撕集合(持续更新)
人工智能·算法·机器学习·推荐算法
鹿角片ljp3 小时前
力扣14.最长公共前缀-纵向扫描法
java·算法·leetcode