当前位置:首页 > 编程笔记 > 正文
已解决

Leetcode刷题详解——点名

来自网友在路上 155855提问 提问时间:2023-10-28 10:24:33阅读次数: 55

最佳答案 问答题库558位专家为你答疑解惑

1. 题目链接:LCR 173. 点名

2. 题目描述:

某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席,请返回他的学号。

示例 1:

输入: records = [0,1,2,3,5]
输出: 4

示例 2:

输入: records = [0, 1, 2, 3, 4, 5, 6, 8]
输出: 7

提示:

1 <= records.length <= 10000

3. 解法1(二分查找):

3.1 解题思路

在第一个缺失位置的左边,数组内的元素都是与数组的下标相等的

在第一个缺失位置的右边,数组内的元素与数组下标是不相等的

请添加图片描述

3.2 C++算法代码:

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) left=mid+1;else right=mid;}return left==records[left]?left+1:left;}
};

4. 解法2(直接遍历):

4.1 解题思路:

用完整的数组的和减去缺少一个数的数组的和就可以求出那个缺少的数

4.2 C++算法代码:

class Solution {
public:int takeAttendance(vector<int>& records) {int sum=0,sum_arr=0;for(int i=0;i<=records.size();i++){sum+=i;if(i<records.size())sum_arr+=records[i];}//用完整数组的和减去缺少数字的数组的和return sum-sum_arr;}
};
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Leetcode刷题详解——点名":http://eshow365.cn/6-26722-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!