当前位置: 面试刷题>> H 指数(经典算法150题)
### 题目描述补充
**题目:H指数(H-Index)**
H指数是一个用于评价学者或研究者学术成就的指标,特别是在科学界和学术界广泛使用。一个研究者的H指数是指他/她至多有h篇论文分别被引用了至少h次,而其余论文的引用次数则可能低于h次。换句话说,如果某位研究者有h篇论文,每篇论文的引用次数都至少为h,且没有(h+1)篇论文的引用次数都至少为(h+1),那么这位研究者的H指数就是h。
**任务**:
给定一个包含论文引用次数的数组(每个元素代表一篇论文的引用次数),编写一个函数来计算并返回该数组的H指数。
### 示例
假设输入数组为 `[3, 0, 6, 1, 5]`,那么H指数为`2`,因为有2篇论文(引用次数为6和5的论文)至少被引用了2次,而其他论文的引用次数则不足2次。
### PHP代码示例
```php
function calculateHIndex($citations) {
rsort($citations); // 对引用次数数组进行降序排序
$hIndex = 0;
foreach ($citations as $index => $citation) {
if ($citation >= $index + 1) {
$hIndex = $index + 1;
} else {
break;
}
}
return $hIndex;
}
// 示例用法
$citations = [3, 0, 6, 1, 5];
echo calculateHIndex($citations); // 输出: 2
```
### Python代码示例
```python
def calculate_h_index(citations):
citations.sort(reverse=True) # 对引用次数数组进行降序排序
h_index = 0
for i, citation in enumerate(citations):
if citation >= i + 1:
h_index = i + 1
else:
break
return h_index
# 示例用法
citations = [3, 0, 6, 1, 5]
print(calculate_h_index(citations)) # 输出: 2
```
### JavaScript代码示例
```javascript
function calculateHIndex(citations) {
citations.sort((a, b) => b - a); // 对引用次数数组进行降序排序
let hIndex = 0;
for (let i = 0; i < citations.length; i++) {
if (citations[i] >= i + 1) {
hIndex = i + 1;
} else {
break;
}
}
return hIndex;
}
// 示例用法
const citations = [3, 0, 6, 1, 5];
console.log(calculateHIndex(citations)); // 输出: 2
```
在这些示例中,我们首先对数组进行降序排序,然后遍历数组,检查每篇论文的引用次数是否满足H指数的定义。一旦不满足条件,就终止循环并返回当前的H指数。这种方法的时间复杂度主要由排序决定,为O(n log n),其中n是数组的长度。