Leetcode 275 Solution

This article provides solution to leetcode question 275 (h-index-ii)

https://leetcode.com/problems/h-index-ii

Thinking Process

Let’s first figure out a linear solution, which is straightforward. We’ll just go through the citations array, and try each element i. if citations[i] >= n - i, we know that this scientist’s index is at least n - i. So let’s just do that for each element, and the first one that meets the condition citations[i] >= n - i is our target, and the result will be n - i.

Now, let’s try to make it O(lg N). Remember our binary search principle here. In this question, the function citations[i] >= n - i has already helped us map the original array to an 0-1 array, and our goal is to find the index of the first 1. We’ll just need to put it into our binary search template binary_search_template, and we get the result.

Time & Space Complexity

Assuming N is the size of the array:

  • Time complexity: O(lg N)
  • Space complexity: O(1)

Solution

class Solution {
public:
    int hIndex(vector<int>& citations) {
        int l = 0;
        int r = citations.size() - 1;

        while (l <= r)
        {
            int m = (l + r) / 2;

            if (citations[m] >= citations.size() - m)
                r = m - 1;
            else
                l = m + 1;
        }

        return citations.size() - l;
    }
};