274. H-Index

Medium
Array Sorting Counting Sort

Given an array of integers citations where citations[i] is the number of citations a researcher received for their i^th paper, return the researcher’s h-index.

According to the definition of h-index on Wikipedia: The h-index is defined as the maximum value of h such that the given researcher has published at least h papers that have each been cited at least h times.

Example 1:

Input: citations = [3,0,6,1,5]
Output: 3
Explanation: [3,0,6,1,5] means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively.
Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, their h-index is 3.

Example 2:

Input: citations = [1,3,1]
Output: 1

Constraints:

  • n == citations.length
  • 1 <= n <= 5000
  • 0 <= citations[i] <= 1000
func hIndex(citations []int) int {
	sort.Ints(citations)
	// fmt.Println(citations)
	for i, count := range citations {
		left := len(citations) - i
		// fmt.Println("article", i, "has", count, "citations")
		// fmt.Println(" ", i, "articles with <", count, "cit")
		// fmt.Println(" ", left, "articles with at least", count, "cit")
		if left <= count {
			// result = max(result, left)
			return left
		}
	}
	return 0
}
💡 Hints (3)
Hint 1
An easy approach is to sort the array first.
Hint 2
What are the possible values of h-index?
Hint 3
A faster approach is to use extra space.