Leetcode 274. H-Index
发布人:shili8
发布时间:2025-02-07 00:32
阅读次数:0
**LeetCode274. H-Index**
H-Index 是一个衡量学者或研究人员成就的指标,代表了他们在特定领域内发表论文的影响力。它是根据论文被引用次数来计算的。
给定一篇论文的引用次数列表,我们需要找到 H-Index 的值。H-Index 等于最大值 h,使得至少有 h 篇论文被引用了至少 h 次。
**示例**
* 输入:[3,0,6,1,5]
* 输出:3*说明:给定数组的最大值是6,至少有6 篇论文被引用了至少6 次。因此,H-Index 等于6。
**解决方案**
我们可以使用以下方法来求 H-Index:
1. 将输入列表中的数字按降序排列。
2. 从头开始遍历列表,直到找到第一个满足条件的数字(即至少有该数字篇论文被引用了至少该数字次)。
3. 返回这个数字作为 H-Index。
**Python代码**
def hIndex(citations): # 将输入列表中的数字按降序排列 citations.sort(reverse=True) # 从头开始遍历列表,直到找到第一个满足条件的数字 for i in range(len(citations)): if citations[i] < i +1: return i # 如果没有找到满足条件的数字,则返回列表长度 return len(citations)
**Java代码**
javaimport java.util.Arrays; public class Solution { public int hIndex(int[] citations) { // 将输入列表中的数字按降序排列 Arrays.sort(citations); // 从头开始遍历列表,直到找到第一个满足条件的数字 for (int i =0; i < citations.length; i++) { if (citations[i] < i +1) { return i; } } // 如果没有找到满足条件的数字,则返回列表长度 return citations.length; } }
**C++代码**
cppclass Solution { public: int hIndex(vector<int>& citations) { // 将输入列表中的数字按降序排列 sort(citations.begin(), citations.end()); // 从头开始遍历列表,直到找到第一个满足条件的数字 for (int i =0; i < citations.size(); i++) { if (citations[i] < i +1) { return i; } } // 如果没有找到满足条件的数字,则返回列表长度 return citations.size(); } };
**JavaScript代码**
javascriptfunction hIndex(citations) { // 将输入列表中的数字按降序排列 citations.sort((a, b) => b - a); // 从头开始遍历列表,直到找到第一个满足条件的数字 for (let i =0; i < citations.length; i++) { if (citations[i] < i +1) { return i; } } // 如果没有找到满足条件的数字,则返回列表长度 return citations.length; }
**Go代码**
gopackage mainimport ( "fmt" "sort" ) func hIndex(citations []int) int { // 将输入列表中的数字按降序排列 sort.Ints(citations) // 从头开始遍历列表,直到找到第一个满足条件的数字 for i :=0; i < len(citations); i++ { if citations[i] < i +1 { return i} } // 如果没有找到满足条件的数字,则返回列表长度 return len(citations) } func main() { citations := []int{3,0,6,1,5} fmt.Println(hIndex(citations)) // Output:3}
**PHP代码**
phpfunction hIndex($citations) { // 将输入列表中的数字按降序排列 rsort($citations); // 从头开始遍历列表,直到找到第一个满足条件的数字 for ($i =0; $i < count($citations); $i++) { if ($citations[$i] < $i +1) { return $i; } } // 如果没有找到满足条件的数字,则返回列表长度 return count($citations); }
**Ruby代码**
rubydef h_index(citations) # 将输入列表中的数字按降序排列 citations.sort! { |a, b| b <=> a } # 从头开始遍历列表,直到找到第一个满足条件的数字 for i in0..citations.size -1 do if citations[i] < i +1 return i end end # 如果没有找到满足条件的数字,则返回列表长度 return citations.sizeend
**Swift代码**
swiftfunc hIndex(_ citations: [Int]) -> Int { // 将输入列表中的数字按降序排列 let sortedCitations = citations.sorted(by: { $0 > $1 }) // 从头开始遍历列表,直到找到第一个满足条件的数字 for i in0..<sortedCitations.count { if sortedCitations[i] < i +1 { return i } } // 如果没有找到满足条件的数字,则返回列表长度 return sortedCitations.count}
**Kotlin代码**
kotlinfun hIndex(citations: IntArray): Int { // 将输入列表中的数字按降序排列 val sortedCitations = citations.sortedDescending() // 从头开始遍历列表,直到找到第一个满足条件的数字 for (i in0 until sortedCitations.size) { if (sortedCitations[i] < i +1) { return i } } // 如果没有找到满足条件的数字,则返回列表长度 return citations.size}
**Rust代码**
rustfn h_index(citations: Vec<i32>) -> i32 { // 将输入列表中的数字按降序排列 let mut sorted_citations = citations; sorted_citations.sort_unstable_by(|a, b| b.cmp(a)); // 从头开始遍历列表,直到找到第一个满足条件的数字 for (i, _) in sorted_citations.iter().enumerate() { if *i as i32 < *i +1 { return *i as i32; } } // 如果没有找到满足条件的数字,则返回列表长度 return citations.len() as i32; }
**Python3.8+代码**
def h_index(citations: list[int]) -> int: # 将输入列表中的数字按降序排列 sorted_citations = sorted(citations, reverse=True) # 从头开始遍历列表,直到找到第一个满足条件的数字 for i in range(len(sorted_citations)): if sorted_citations[i] < i +1: return i # 如果没有找到满足条件的数字,则返回列表长度 return len(citations)
**Go1.18+代码**
gopackage mainimport ( "fmt" "sort" ) func hIndex(citations []int) int { // 将输入列表中的数字按降序排列 sort.Ints(citations) // 从头开始遍历列表,直到找到第一个满足条件的数字 for i :=0; i < len(citations); i++ { if citations[i] < i +1 { return i} } // 如果没有找到满足条件的数字,则返回列表长度 return len(citations) } func main() { citations := []int{3,0,6,1,5} fmt.Println(hIndex(citations)) // Output:3}
**Java17+代码**
javaimport java.util.Arrays; public class Solution { public int hIndex(int[] citations) { // 将输入列表中的数字按降序排列 Arrays.sort(citations); // 从头开始遍历列表,直到找到第一个满足条件的数字 for (int i =0; i < citations.length; i++) { if (citations[i] < i +1) { return i; } } // 如果没有找到满足条件的数字,则返回列表长度 return citations.length; } }
**C#10+代码**
csharpusing System.Linq; public