forked from nch3ng/leetcode-1
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathh_index.rb
39 lines (35 loc) · 1.23 KB
/
h_index.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# https://leetcode.com/problems/h-index/
#
# Given an array of citations (each citation is a non-negative integer) of a
# researcher, write a function to compute the researcher's h-index. According
# to the definition of h-index on Wikipedia: "A scientist has index h if h of
# his/her N papers have at least h citations each, and the other N − h papers
# have no more than h citations each."
#
# For example, given citations = [3, 0, 6, 1, 5], which 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, his h-index
# is 3.
#
# Note:
#
# If there are several possible values for h, the maximum one is taken as
# the h-index.
#
# Credits:
#
# Special thanks to @jianchao.li.fighter for adding this problem and
# creating all test cases.
# @param {Integer[]} citations
# @return {Integer}
def h_index(citations)
maxhindex = citations.size
nums = Array.new(maxhindex + 1, 0)
citations.each { |citation| nums[[citation, maxhindex].min] += 1 }
count = 0
maxhindex.downto(0) do |idx|
count += nums[idx]
return idx if count >= idx
end
end