[Swift]LeetCode274.H指数 | H-Index

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-ofzqmotc-kz.html 
➤若是连接不是山青咏芝的博客园地址,则多是爬取做者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持做者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★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.git

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."github

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,0,6,1,5][3,0,6,1,5]53, 0, 6, 1, 53333

Note: If there are several possible values for h, the maximum one is taken as the h-index.微信


给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 指数。ide

h 指数的定义: “h 表明“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)至多有 h 篇论文分别被引用了至少 h 次。(其他的 N - h 篇论文每篇被引用次数很少于 次。)”spa

示例:code

输入: 
输出: 3 
解释: 给定数组表示研究者总共有  篇论文,每篇论文相应的被引用了  次。
     因为研究者有 篇论文每篇至少被引用了  次,其他两篇论文每篇被引用很少于  次,因此她的 h 指数是 。citations = [3,0,6,1,5]53, 0, 6, 1, 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 }

28mshtm

 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 }

28msblog

 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 }
相关文章
相关标签/搜索