每日OJ题_算法_二分查找⑧_力扣LCR 173. 点名

目录

力扣LCR 173. 点名

解析代码


力扣LCR 173. 点名

LCR 173. 点名 - 力扣(LeetCode)

难度 简单

某班级 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

class Solution {
public:
    int takeAttendance(vector<int>& records) {


    }
};

解析代码

此题就是以前写过的剑指Offer中数组消失的数字,以前用的位运算的解法解的,此题解法有哈希,遍历,位运算,数学求和,时间都是O(N),二分的解法是O(logN)。

二段性就是找的元素的值肯定不等于数组下标,求左端点的套路:

class Solution {
public:
    int takeAttendance(vector<int>& records) {
        // 解法有哈希,遍历,位运算,数学求和,时间都是O(N),二分的解法是O(logN)
        // 此题二段性就是找的元素的值肯定不等于数组下标,求左端点的套路
        int left = 0, right = records.size() - 1;
        if(records[right] == right)
        {
            return right + 1;
        }
        while(left < right)
        {
            int mid = left + (right - left) / 2;
            if(records[mid] == mid)
            {
                left = mid + 1;
            }
            else
            {
                right = mid;
            }
        }
        return records[left] - 1;

    }
};

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-28 08:14:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-28 08:14:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-28 08:14:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-28 08:14:01       20 阅读

热门阅读

  1. 【代码分享】

    2024-01-28 08:14:01       28 阅读
  2. 六、MySQL之视图与索引

    2024-01-28 08:14:01       32 阅读
  3. 强化学习 - Trust Region Policy Optimization (TRPO)

    2024-01-28 08:14:01       29 阅读
  4. Kong Upstream

    2024-01-28 08:14:01       30 阅读
  5. 单例模式(五种创建方式)

    2024-01-28 08:14:01       40 阅读
  6. PyTorch 之 nn.Parameter

    2024-01-28 08:14:01       31 阅读
  7. 编程语言比较—ruby,python,php比较

    2024-01-28 08:14:01       22 阅读