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 的右边(包含分割点),必然满足 citations[i]>=x,我们应当对其进行计数,对于分割点的左边,必然不满足 citations[i]>=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;
    }
};
相关推荐
云边有个稻草人1 小时前
【C++】第二十一节—一文详解 | 红黑树实现(规则+效率+结构+插入+查找+验证)
算法·红黑树·红黑树的插入·红黑树的结构·红黑树完整代码·红黑树的效率·红黑树的查找
仟濹2 小时前
【C/C++】整数超过多少位时用「高精度」
c语言·c++·算法
DIY机器人工房6 小时前
一个可以检测本机的字节顺序,并对任意数据进行字节顺序的反转操作的代码。
嵌入式硬件·算法·嵌入式·diy机器人工房
新手小新6 小时前
C++游戏开发(2)
开发语言·前端·c++
杰克尼7 小时前
11. 盛最多水的容器
算法·leetcode·职场和发展
程序员编程指南8 小时前
Qt 嵌入式界面优化技术
c语言·开发语言·c++·qt
程序员Xu9 小时前
【OD机试题解法笔记】查找接口成功率最优时间段
笔记·算法
逝雪Yuki9 小时前
数据结构与算法——字典(前缀)树的实现
数据结构·c++·字典树·前缀树·左程云
技术思考者10 小时前
Leetcode - 反转字符串
数据结构·算法·leetcode
卷卷的小趴菜学编程10 小时前
Qt-----初识
开发语言·c++·qt·sdk·qt介绍