Skip to content

Commit aee3f41

Browse files
committed
feat: update solutions to lc problem: No.0275
No.0275.H-Index II
1 parent d99c966 commit aee3f41

File tree

10 files changed

+161
-111
lines changed

10 files changed

+161
-111
lines changed

solution/0200-0299/0274.H-Index/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
class Solution:
5656
def hIndex(self, citations: List[int]) -> int:
5757
n = len(citations)
58-
cnt = [0 for i in range(n + 1)]
58+
cnt = [0] * (n + 1)
5959
for c in citations:
6060
if c <= n:
6161
cnt[c] += 1

solution/0200-0299/0274.H-Index/README_EN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ The simplest solution is to judge after sort, but because `H` cannot be greater
4848
class Solution:
4949
def hIndex(self, citations: List[int]) -> int:
5050
n = len(citations)
51-
cnt = [0 for i in range(n + 1)]
51+
cnt = [0] * (n + 1)
5252
for c in citations:
5353
if c <= n:
5454
cnt[c] += 1
+15-15
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
class Solution:
2-
def hIndex(self, citations: List[int]) -> int:
3-
n = len(citations)
4-
cnt = [0 for i in range(n + 1)]
5-
for c in citations:
6-
if c <= n:
7-
cnt[c] += 1
8-
else:
9-
cnt[n] += 1
10-
sum = 0
11-
for i in range(n, -1, -1):
12-
sum += cnt[i]
13-
if sum >= i:
14-
return i
15-
return 0
1+
class Solution:
2+
def hIndex(self, citations: List[int]) -> int:
3+
n = len(citations)
4+
cnt = [0] * (n + 1)
5+
for c in citations:
6+
if c <= n:
7+
cnt[c] += 1
8+
else:
9+
cnt[n] += 1
10+
sum = 0
11+
for i in range(n, -1, -1):
12+
sum += cnt[i]
13+
if sum >= i:
14+
return i
15+
return 0

solution/0200-0299/0275.H-Index II/README.md

+40-19
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@
4646

4747
<!-- 这里可写通用的实现逻辑 -->
4848

49-
二分查找。
49+
**方法一:二分查找**
50+
51+
二分枚举 h,获取满足条件的最大 h。由于要满足 h 篇论文至少被引用 h 次,因此 `citations[n - mid] >= mid`
52+
53+
时间复杂度 O(logn)。
5054

5155
<!-- tabs:start -->
5256

@@ -60,12 +64,12 @@ class Solution:
6064
n = len(citations)
6165
left, right = 0, n
6266
while left < right:
63-
mid = (left + right) >> 1
64-
if citations[mid] >= n - mid:
65-
right = mid
67+
mid = (left + right + 1) >> 1
68+
if citations[n - mid] >= mid:
69+
left = mid
6670
else:
67-
left = mid + 1
68-
return n - left
71+
right = mid - 1
72+
return left
6973
```
7074

7175
### **Java**
@@ -98,15 +102,13 @@ public:
98102
int hIndex(vector<int>& citations) {
99103
int n = citations.size();
100104
int left = 0, right = n;
101-
while (left < right) {
102-
int mid = left + right >> 1;
103-
if (citations[mid] >= n - mid) {
104-
right = mid;
105-
} else {
106-
left = mid + 1;
107-
}
105+
while (left < right)
106+
{
107+
int mid = (left + right + 1) >> 1;
108+
if (citations[n - mid] >= mid) left = mid;
109+
else right = mid - 1;
108110
}
109-
return n - left;
111+
return left;
110112
}
111113
};
112114
```
@@ -118,14 +120,33 @@ func hIndex(citations []int) int {
118120
n := len(citations)
119121
left, right := 0, n
120122
for left < right {
121-
mid := (left + right) >> 1
122-
if citations[mid] >= n-mid {
123-
right = mid
123+
mid := (left + right + 1) >> 1
124+
if citations[n-mid] >= mid {
125+
left = mid
124126
} else {
125-
left = mid + 1
127+
right = mid - 1
126128
}
127129
}
128-
return n - left
130+
return left
131+
}
132+
```
133+
134+
### **TypeScript**
135+
136+
```ts
137+
function hIndex(citations: number[]): number {
138+
const n = citations.length;
139+
let left = 0,
140+
right = n;
141+
while (left < right) {
142+
const mid = (left + right + 1) >> 1;
143+
if (citations[n - mid] >= mid) {
144+
left = mid;
145+
} else {
146+
right = mid - 1;
147+
}
148+
}
149+
return left;
129150
}
130151
```
131152

solution/0200-0299/0275.H-Index II/README_EN.md

+40-23
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ class Solution:
5353
n = len(citations)
5454
left, right = 0, n
5555
while left < right:
56-
mid = (left + right) >> 1
57-
if citations[mid] >= n - mid:
58-
right = mid
56+
mid = (left + right + 1) >> 1
57+
if citations[n - mid] >= mid:
58+
left = mid
5959
else:
60-
left = mid + 1
61-
return n - left
60+
right = mid - 1
61+
return left
6262
```
6363

6464
### **Java**
@@ -69,14 +69,14 @@ class Solution {
6969
int n = citations.length;
7070
int left = 0, right = n;
7171
while (left < right) {
72-
int mid = (left + right) >>> 1;
73-
if (citations[mid] >= n - mid) {
74-
right = mid;
72+
int mid = (left + right + 1) >> 1;
73+
if (citations[n - mid] >= mid) {
74+
left = mid;
7575
} else {
76-
left = mid + 1;
76+
right = mid - 1;
7777
}
7878
}
79-
return n - left;
79+
return left;
8080
}
8181
}
8282
```
@@ -89,15 +89,13 @@ public:
8989
int hIndex(vector<int>& citations) {
9090
int n = citations.size();
9191
int left = 0, right = n;
92-
while (left < right) {
93-
int mid = left + right >> 1;
94-
if (citations[mid] >= n - mid) {
95-
right = mid;
96-
} else {
97-
left = mid + 1;
98-
}
92+
while (left < right)
93+
{
94+
int mid = (left + right + 1) >> 1;
95+
if (citations[n - mid] >= mid) left = mid;
96+
else right = mid - 1;
9997
}
100-
return n - left;
98+
return left;
10199
}
102100
};
103101
```
@@ -109,14 +107,33 @@ func hIndex(citations []int) int {
109107
n := len(citations)
110108
left, right := 0, n
111109
for left < right {
112-
mid := (left + right) >> 1
113-
if citations[mid] >= n-mid {
114-
right = mid
110+
mid := (left + right + 1) >> 1
111+
if citations[n-mid] >= mid {
112+
left = mid
115113
} else {
116-
left = mid + 1
114+
right = mid - 1
117115
}
118116
}
119-
return n - left
117+
return left
118+
}
119+
```
120+
121+
### **TypeScript**
122+
123+
```ts
124+
function hIndex(citations: number[]): number {
125+
const n = citations.length;
126+
let left = 0,
127+
right = n;
128+
while (left < right) {
129+
const mid = (left + right + 1) >> 1;
130+
if (citations[n - mid] >= mid) {
131+
left = mid;
132+
} else {
133+
right = mid - 1;
134+
}
135+
}
136+
return left;
120137
}
121138
```
122139

Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
class Solution {
2-
public:
3-
int hIndex(vector<int>& citations) {
4-
int n = citations.size();
5-
int left = 0, right = n;
6-
while (left < right) {
7-
int mid = left + right >> 1;
8-
if (citations[mid] >= n - mid) {
9-
right = mid;
10-
} else {
11-
left = mid + 1;
12-
}
13-
}
14-
return n - left;
15-
}
1+
class Solution {
2+
public:
3+
int hIndex(vector<int>& citations) {
4+
int n = citations.size();
5+
int left = 0, right = n;
6+
while (left < right)
7+
{
8+
int mid = (left + right + 1) >> 1;
9+
if (citations[n - mid] >= mid) left = mid;
10+
else right = mid - 1;
11+
}
12+
return left;
13+
}
1614
};
+12-12
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
func hIndex(citations []int) int {
2-
n := len(citations)
3-
left, right := 0, n
4-
for left < right {
5-
mid := (left + right) >> 1
6-
if citations[mid] >= n-mid {
7-
right = mid
8-
} else {
9-
left = mid + 1
10-
}
11-
}
12-
return n - left
1+
func hIndex(citations []int) int {
2+
n := len(citations)
3+
left, right := 0, n
4+
for left < right {
5+
mid := (left + right + 1) >> 1
6+
if citations[n-mid] >= mid {
7+
left = mid
8+
} else {
9+
right = mid - 1
10+
}
11+
}
12+
return left
1313
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
class Solution {
2-
public int hIndex(int[] citations) {
3-
int n = citations.length;
4-
int left = 0, right = n;
5-
while (left < right) {
6-
int mid = (left + right) >>> 1;
7-
if (citations[mid] >= n - mid) {
8-
right = mid;
9-
} else {
10-
left = mid + 1;
11-
}
12-
}
13-
return n - left;
14-
}
1+
class Solution {
2+
public int hIndex(int[] citations) {
3+
int n = citations.length;
4+
int left = 0, right = n;
5+
while (left < right) {
6+
int mid = (left + right + 1) >> 1;
7+
if (citations[n - mid] >= mid) {
8+
left = mid;
9+
} else {
10+
right = mid - 1;
11+
}
12+
}
13+
return left;
14+
}
1515
}
+11-11
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
class Solution:
2-
def hIndex(self, citations: List[int]) -> int:
3-
n = len(citations)
4-
left, right = 0, n
5-
while left < right:
6-
mid = (left + right) >> 1
7-
if citations[mid] >= n - mid:
8-
right = mid
9-
else:
10-
left = mid + 1
11-
return n - left
1+
class Solution:
2+
def hIndex(self, citations: List[int]) -> int:
3+
n = len(citations)
4+
left, right = 0, n
5+
while left < right:
6+
mid = (left + right + 1) >> 1
7+
if citations[n - mid] >= mid:
8+
left = mid
9+
else:
10+
right = mid - 1
11+
return left
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
function hIndex(citations: number[]): number {
2+
const n = citations.length;
3+
let left = 0,
4+
right = n;
5+
while (left < right) {
6+
const mid = (left + right + 1) >> 1;
7+
if (citations[n - mid] >= mid) {
8+
left = mid;
9+
} else {
10+
right = mid - 1;
11+
}
12+
}
13+
return left;
14+
}

0 commit comments

Comments
 (0)