题目

image.png

思路

  • 二分查找,右边区间需要满足条件nums[i] >= h
  • 寻找右边区间的左端点即可
  • 注意处理边界情况

    代码

    1. class Solution {
    2. public:
    3. // 排序之后,右边区间满足了条件:nums[i] >= h
    4. int hIndex(vector<int>& citations) {
    5. int n = citations.size();
    6. int left = 0, right = n - 1;
    7. while (left < right) {
    8. int mid = (left + right) / 2;
    9. if (citations[mid] >= (n - 1) - mid + 1) {
    10. right = mid;
    11. } else {
    12. left = mid + 1;
    13. }
    14. }
    15. // 右边区间的左端点 == n - 1
    16. if (citations[left] == 0) {
    17. return 0;
    18. } else {
    19. return (n - 1) - left + 1;
    20. }
    21. }
    22. };