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;
    }
};
相关推荐
John_ToDebug4 小时前
浏览器扩展延迟加载优化实战:如何让浏览器启动速度提升50%
c++·chrome·windows
是娇娇公主~4 小时前
C++ 中 std::deque 的原理?它内部是如何实现的?
开发语言·c++·stl
Fly Wine4 小时前
Leetcode之有效字母异位词
算法·leetcode·职场和发展
程序员夏末5 小时前
【LeetCode | 第七篇】算法笔记
笔记·算法·leetcode
luanma1509806 小时前
PHP vs C++:编程语言终极对决
开发语言·c++·php
csdn_aspnet6 小时前
C/C++ 两个凸多边形之间的切线(Tangents between two Convex Polygons)
c语言·c++·算法
数据皮皮侠6 小时前
中国城市间地理距离矩阵(2024)
大数据·数据库·人工智能·算法·制造
3GPP仿真实验室6 小时前
深度解析基站接收机核心算法:从 MRC 到 IRC 的空间滤波演进
算法
Boop_wu6 小时前
[Java 算法] 动态规划(1)
算法·动态规划
WolfGang0073217 小时前
代码随想录算法训练营 Day18 | 二叉树 part08
算法