[Swift]LeetCode274.H指数 | H-Index
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10241095.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
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:citations = [3,0,6,1,5]Output: 3 Explanation:[3,0,6,1,5]means the researcher has5papers in total and each of them had received3, 0, 6, 1, 5citations respectively. Since the researcher has3papers with at least3citations each and the remaining two with no more than3citations each, her h-index is3.
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 次。)”
示例:
输入:citations = [3,0,6,1,5]输出: 3 解释: 给定数组表示研究者总共有5篇论文,每篇论文相应的被引用了3, 0, 6, 1, 5次。 由于研究者有3篇论文每篇至少被引用了3次,其余两篇论文每篇被引用不多于3次,所以她的 h 指数是3。
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, 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 }
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 }

浙公网安备 33010602011771号