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;
    }
};
相关推荐
许长安13 分钟前
c/c++ static关键字详解
c语言·c++·经验分享·笔记
Murphy_lx32 分钟前
C++ thread类
开发语言·c++
月夜的风吹雨33 分钟前
【C++ STL 深度剖析】:vector 底层模拟实现与核心陷阱解析
c++·vector·类和对象·visual studio
彩妙不是菜喵40 分钟前
C++ 中 nullptr 的使用与实践:从陷阱到最佳实践
开发语言·jvm·c++
蒙奇D索大1 小时前
【算法】递归的艺术:从本质思想到递归树,深入剖析算法的性能权衡
经验分享·笔记·算法·改行学it
王哈哈^_^1 小时前
【数据集+完整源码】水稻病害数据集,yolov8水稻病害检测数据集 6715 张,目标检测水稻识别算法实战训推教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
light_in_hand1 小时前
内存区域划分——垃圾回收
java·jvm·算法
小安同学iter2 小时前
SQL50+Hot100系列(11.7)
java·算法·leetcode·hot100·sql50
_dindong2 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
星释2 小时前
Rust 练习册 :Nucleotide Codons与生物信息学
开发语言·算法·rust