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."
Example:
Input: Output: 3 Explanation: means the researcher has papers in total and each of them had received citations respectively. Since the researcher has papers with at least citations each and the remaining two with no more than citations each,her h-index is .citations = [3,6,1,5][3,5]53,53333
Note: If there are several possible values for h,the maximum one is taken as the h-index.
给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h 指数。
h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)”
示例:
输入: 输出: 3 解释: 给定数组表示研究者总共有 篇论文,每篇论文相应的被引用了 次。 由于研究者有 篇论文每篇至少被引用了 次,其余两篇论文每篇被引用不多于 次,所以她的 h 指数是 。citations = [3,53333
24ms
1 class Solution { 2 func hIndex(_ citations: [Int]) -> Int { 3 let arr = citations.sorted { (num1,num2) -> Bool in 4 return num1 < num2 5 } 6 for i in 0 ..< arr.count { 7 if arr[i] >= arr.count - i { 8 return arr.count - i 9 } 10 } 11 12 return 0 13 } 14 }
28ms
1 class Solution { 2 func hIndex(_ citations: [Int]) -> Int { 3 if citations.isEmpty { 4 return 0 5 } 6 let n = citations.count 7 var res = Array(repeating: 0,count: n + 1) 8 9 for i in citations { 10 if i > n{ 11 res[n] += 1 12 }else { 13 res[i] += 1 14 } 15 } 16 17 for i in stride(from: n,to: 0,by: -1) { 18 if res[i] >= i { 19 return i 20 } 21 res[i-1] += res[i] 22 } 23 24 25 return 0 26 } 27 }
28ms
1 class Solution { 2 func hIndex(_ citations: [Int]) -> Int { 3 if citations.isEmpty { 4 return 0 5 } 6 let n = citations.count 7 var res = Array(repeating: 0,by: -1) { 18 if res[i] >= i { 19 return i 20 } 21 res[i-1] += res[i] 22 } 23 24 25 return 0 26 } 27 }
36ms
1 class Solution { 2 func hIndex(_ citations: [Int]) -> Int { 3 let n = citations.count 4 if (n == 0) {return 0} 5 var array = Array(repeating:0,count:n + 1) 6 for i in 0..<n { 7 if(citations[i] > n) { //所有比n大的都算一起,因为已经不可能是这个了,只计算有几篇 8 array[n] += 1 9 } 10 else 11 { 12 array[citations[i]] += 1 //对应的次数+1 13 } 14 } 15 var t = 0 16 for i in (0...n).reversed() { 17 t = t + array[i] //累加次数 18 if(t >= i) { 19 return i 20 } 21 } 22 return 0 23 } 24 }
40ms
1 class Solution { 2 func hIndex(_ citations: [Int]) -> Int { 3 guard citations.count > 0 else { 4 return 0 5 } 6 let res = citations.sorted() 7 for (index,value) in res.enumerated() { 8 if value >= (res.count - index){ 9 return res.count - index 10 } 11 } 12 return 0 13 } 14 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。