[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 }
相關文章
相關標籤/搜索