当前位置:首页 > 编程笔记 > 正文
已解决

Day14力扣打卡

来自网友在路上 152852提问 提问时间:2023-11-01 05:37:08阅读次数: 52

最佳答案 问答题库528位专家为你答疑解惑

打卡记录

在这里插入图片描述


H 指数(二分)

链接

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

  • 少于等于 x 的数值必然满足条件;
  • 大于 x 的数值必然不满足。
    采用右边界二分查找,寻找满足条件的最大 H 指数要求。
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 指数。

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;}
};
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"Day14力扣打卡":http://eshow365.cn/6-29188-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!