Below is using `sort()`

. The idea is actually the same with no sort() solution. The most significant disadvantage I think is not the time performance, is the `if statement`

, I tried many times to pass all the test cases.....

```
public int hIndex(int[] c) {
if (c.length == 0) return 0;
int len = c.length;
Arrays.sort(c);
int count = 0;
int h = 1;
for (int i = len - 1; i >= 0; i--) {
h = c[i];
count++;
if (count == h) return h;
if (count > h && count > 1) return Math.min(count - 1, c[i + 1]);
if (count == 1 && count > h) return 0;
}
return count;
}
```

Without `sort()`

, this method actually also *sorts* (not real sort, but kind of sort) the citation, just by ourselves instead of `sort()`

.

```
public int hIndex(int[] c) {
int n = c.length;
if (n == 0) return 0;
// the number of high citations
int[] record = new int[n + 1];
// count the citations
for (int i : c) {
if (i >= n) record[n]++;
else record[i]++;
}
// get the h
int count = 0;
for (int i = n; i > 0; i--) {
count += record[i];
if (count >= i) {
return i;
}
}
return 0;
}
```