Leetcode 每日一题C 语言版 -- 274 H-index
日拱一卒,功不唐捐。欢迎诸君评论区打卡同行共勉!!
问题描述
https://leetcode.com/problems/h-index/description/?envType=study-plan-v2\&envId=top-interview-150
Given an array of integers citations where citations[i] is the number of citations a researcher received for their ith paper, return the researcher's h-index.
According to the definition of h-index on Wikipedia: The h-index is defined as the maximum value of h such that the given researcher has published at least h papers that have each been cited at least h times.
Example 1:
Input: citations = [3,0,6,1,5]
Output: 3
Explanation: [3,0,6,1,5] means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively.
Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, their h-index is 3.
Example 2:
Input: citations = [1,3,1]
Output: 1
Constraints:
n == citations.length
1 <= n <= 5000
0 <= citations[i] <= 1000
解法一
先排序,引用次数从小到大排序,例如[3, 0, 6, 1, 5]
-> [0, 1, 3, 5, 6], 遍历数组
引用X大于等于0 的有Y个, 5 - 0 = 5个
引用X大于等于1 的有Y个, 5 - 1 = 4个
引用X大于等于3 的有Y个, 5 - 2 = 3个
引用X大于等于5 的有Y个, 5 - 3 = 2个
引用X大于等于6 的有Y个, 5 - 4 = 1个
X>=Y时, Y即为H-index
c
#include <stdlib.h>
#define max(x, y) ((x) > (y) ? (x) : (y))
static int compare(const void *a, const void *b)
{
int __a = *(const int *)a;
int __b = *(const int *)b;
return (__a > __b) - (__a < __b);
}
int hIndex(int* citations, int citationsSize) {
uint32_t i = 0;
qsort(citations, citationsSize, sizeof(int), compare);
for (i = 0; i < citationsSize; i++) {
if (citations[i] >= citationsSize - i)
return citationsSize - i;
}
return 0;
}