# H-Index – LeetCode Solution Java , Python 3, Python 2 , C , C++, Best and Optimal Solutions , All you need.

Given an array of integers `citations`

where `citations[i]`

is the number of citations a researcher received for their `i`

paper, return compute the researcher’s ^{th}`h`

**-index**.

According to the definition of h-index on Wikipedia: A scientist has an index `h`

if `h`

of their `n`

papers have at least `h`

citations each, and the other `n − h`

papers have no more than `h`

citations each.

If there are several possible values for `h`

, the maximum one is taken as the `h`

**-index**.

**Example 1:**

Input:citations = [3,0,6,1,5]Output:3Explanation:[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`

# C++ H-Index LeetCode Solution

```
```class Solution {

public:

```
int hIndex(vector<int>& citations) {
if(citations.empty())
return 0;
int n = citations.size();
vector<int> hash(n + 1, 0);
for(int i = 0; i < n; ++i){
if(citations[i] >= n)
hash[n]++;
else
hash[citations[i]]++;
}
int paper = 0;
for(int i = n; i >= 0; --i){
paper += hash[i];
if(paper >= i)
return i;
}
}
```

};

# Java H-Index LeetCode Solution

```
``````
public int hIndex(int[] citations) {
int n = citations.length;
int[] buckets = new int[n+1];
for(int c : citations) {
if(c >= n) {
buckets[n]++;
} else {
buckets[c]++;
}
}
int count = 0;
for(int i = n; i >= 0; i--) {
count += buckets[i];
if(count >= i) {
return i;
}
}
return 0;
}
```

# Python 3 H-Index LeetCode Solution

```
``````
def hIndex(self, citations):
n = len(citations)
citeCount = [0] * (n+1)
for c in citations:
if c >= n:
citeCount[n] += 1
else:
citeCount[c] += 1
i = n-1
while i >= 0:
citeCount[i] += citeCount[i+1]
if citeCount[i+1] >= i+1:
return i+1
i -= 1
return 0
```

Array-1180

String-562

Hash Table-412

Dynamic Programming-390

Math-368

Sorting-264

Greedy-257

Depth-First Search-256

Database-215

Breadth-First Search-200

Tree-195

Binary Search-191

Matrix-176

Binary Tree-160

Two Pointers-151

Bit Manipulation-140

Stack-133

Heap (Priority Queue)-117

Design-116

Graph-108

Simulation-103

Prefix Sum-96

Backtracking-92

Counting-86

Sliding Window-73

Linked List-69

Union Find-66

Ordered Set-48

Monotonic Stack-47

Recursion-43

Trie-41

Binary Search Tree-40

Divide and Conquer-40

Enumeration-39

Bitmask-37

Queue-33

Memoization-32

Topological Sort-31

Geometry-30

Segment Tree-27

Game Theory-24

Hash Function-24

Binary Indexed Tree-21

Interactive-18

Data Stream-17

String Matching-17

Rolling Hash-17

Shortest Path-16

Number Theory-16

Combinatorics-15

Randomized-12

Monotonic Queue-9

Iterator-9

Merge Sort-9

Concurrency-9

Doubly-Linked List-8

Brainteaser-8

Probability and Statistics-7

Quickselect-7

Bucket Sort-6

Suffix Array-6

Minimum Spanning Tree-5

Counting Sort-5

Shell-4

Line Sweep-4

Reservoir Sampling-4

Eulerian Circuit-3

Radix Sort-3

Strongly Connected Componen-t2

Rejection Sampling-2

Biconnected Component-1

## Leave a comment below