Day14力扣打卡

打卡记录

H 指数(二分)

链接

以最大值 x 为分割点的正整数数轴上,满足:

  • 少于等于 x 的数值必然满足条件;
  • 大于 x 的数值必然不满足。
    采用右边界二分查找,寻找满足条件的最大 H 指数要求。
cpp 复制代码
class Solution {
public:
    int hIndex(vector<int>& citations) {
        int n = citations.size();
        auto check = [&](int mid) -> bool {
            int cnt = 0;
            for (int i = 0; i < n; ++i)
                if (citations[i] >= mid) cnt++;
            return cnt >= mid;
        };
        int l = 0, r = n;
        while (l < r) {
            int mid = (l + r + 1) / 2;
            if (check(mid)) l = mid;
            else r = mid - 1;
        }
        return l;
    }
};

H 指数 II(二分)

链接

由于数组按照顺序排序,因此满足:

如果数组升序,在最大的符合条件的分割点 x 的右边(包含分割点),必然满足 citationsi>=x,我们应当对其进行计数,对于分割点的左边,必然不满足 citationsi>=x,无需进行计数。

由于是从右边开始的满足条件,这里使用左边界二分查找,来寻找最大 H 指数。

cpp 复制代码
class Solution {
public:
    int hIndex(vector<int>& citations) {
        int n = citations.size(), l = 0, r = n;
        while (l < r) {
            int mid = l + (r - l) / 2;
            if (citations[mid] >= n - mid) r = mid;
            else l = mid + 1;
        }
        return n - l;
    }
};
相关推荐
不会就选b4 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
罗西的思考10 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer10 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
丰色木夕11 小时前
Ubuntu22.04下源码编译安装USD-Brep
c++·ubuntu·nvidia·usd-brep
文丑颜不良啊11 小时前
LeetCode51~75题目解析
leetcode
高晶11 小时前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy11 小时前
大数计算思路
算法
高晶11 小时前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
学电子她就能回来吗12 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode
用户老李12 小时前
反向传播计算梯度举例
算法