Skip to content

Commit f4cbbce

Browse files
committed
feat: add solutions to lc problem: No.0744. Find Smallest Letter Greater Than Target
1 parent 78450b0 commit f4cbbce

File tree

6 files changed

+167
-22
lines changed

6 files changed

+167
-22
lines changed

solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README.md

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ target = "k"
5959
<li>目标字母<code>target</code> 是一个小写字母。</li>
6060
</ol>
6161

62-
6362
## 解法
6463

6564
<!-- 这里可写通用的实现逻辑 -->
@@ -71,15 +70,74 @@ target = &quot;k&quot;
7170
<!-- 这里可写当前语言的特殊实现逻辑 -->
7271

7372
```python
74-
73+
class Solution:
74+
def nextGreatestLetter(self, letters: List[str], target: str) -> str:
75+
left, right = 0, len(letters)
76+
while left < right:
77+
mid = (left + right) >> 1
78+
if ord(letters[mid]) > ord(target):
79+
right = mid
80+
else:
81+
left = mid + 1
82+
return letters[left % len(letters)]
7583
```
7684

7785
### **Java**
7886

7987
<!-- 这里可写当前语言的特殊实现逻辑 -->
8088

8189
```java
90+
class Solution {
91+
public char nextGreatestLetter(char[] letters, char target) {
92+
int left = 0, right = letters.length;
93+
while (left < right) {
94+
int mid = (left + right) >> 1;
95+
if (letters[mid] > target) {
96+
right = mid;
97+
} else {
98+
left = mid + 1;
99+
}
100+
}
101+
return letters[left % letters.length];
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
char nextGreatestLetter(vector<char>& letters, char target) {
112+
int left = 0, right = letters.size();
113+
while (left < right) {
114+
int mid = left + right >> 1;
115+
if (letters[mid] > target) {
116+
right = mid;
117+
} else {
118+
left = mid + 1;
119+
}
120+
}
121+
return letters[left % letters.size()];
122+
}
123+
};
124+
```
82125
126+
### **Go**
127+
128+
```go
129+
func nextGreatestLetter(letters []byte, target byte) byte {
130+
left, right := 0, len(letters)
131+
for left < right {
132+
mid := (left + right) >> 1
133+
if letters[mid] > target {
134+
right = mid
135+
} else {
136+
left = mid + 1
137+
}
138+
}
139+
return letters[left%len(letters)]
140+
}
83141
```
84142

85143
### **...**

solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README_EN.md

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ Given a list of sorted characters <code>letters</code> containing only lowercase
1010

1111
</p><p>
1212

13-
Letters also wrap around. For example, if the target is <code>target = 'z'</code> and <code>letters = ['a', 'b']</code>, the answer is <code>'a'</code>.
13+
Letters also wrap around. For example, if the target is <code>target = 'z'</code> and <code>letters = ['a', 'b']</code>, the answer is <code>'a'</code>.
1414

1515
</p>
1616

17-
18-
1917
<p><b>Examples:</b><br />
2018

2119
<pre>
@@ -82,8 +80,6 @@ target = "k"
8280

8381
</p>
8482

85-
86-
8783
<p><b>Note:</b><br>
8884

8985
<ol>
@@ -105,13 +101,72 @@ target = "k"
105101
### **Python3**
106102

107103
```python
108-
104+
class Solution:
105+
def nextGreatestLetter(self, letters: List[str], target: str) -> str:
106+
left, right = 0, len(letters)
107+
while left < right:
108+
mid = (left + right) >> 1
109+
if ord(letters[mid]) > ord(target):
110+
right = mid
111+
else:
112+
left = mid + 1
113+
return letters[left % len(letters)]
109114
```
110115

111116
### **Java**
112117

113118
```java
119+
class Solution {
120+
public char nextGreatestLetter(char[] letters, char target) {
121+
int left = 0, right = letters.length;
122+
while (left < right) {
123+
int mid = (left + right) >> 1;
124+
if (letters[mid] > target) {
125+
right = mid;
126+
} else {
127+
left = mid + 1;
128+
}
129+
}
130+
return letters[left % letters.length];
131+
}
132+
}
133+
```
134+
135+
### **C++**
136+
137+
```cpp
138+
class Solution {
139+
public:
140+
char nextGreatestLetter(vector<char>& letters, char target) {
141+
int left = 0, right = letters.size();
142+
while (left < right) {
143+
int mid = left + right >> 1;
144+
if (letters[mid] > target) {
145+
right = mid;
146+
} else {
147+
left = mid + 1;
148+
}
149+
}
150+
return letters[left % letters.size()];
151+
}
152+
};
153+
```
114154
155+
### **Go**
156+
157+
```go
158+
func nextGreatestLetter(letters []byte, target byte) byte {
159+
left, right := 0, len(letters)
160+
for left < right {
161+
mid := (left + right) >> 1
162+
if letters[mid] > target {
163+
right = mid
164+
} else {
165+
left = mid + 1
166+
}
167+
}
168+
return letters[left%len(letters)]
169+
}
115170
```
116171

117172
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
char nextGreatestLetter(vector<char>& letters, char target) {
4+
int left = 0, right = letters.size();
5+
while (left < right) {
6+
int mid = left + right >> 1;
7+
if (letters[mid] > target) {
8+
right = mid;
9+
} else {
10+
left = mid + 1;
11+
}
12+
}
13+
return letters[left % letters.size()];
14+
}
15+
};
Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
1-
/**
2-
* @lc app=leetcode.cn id=744 lang=golang
3-
* Accepted
4-
* 165/165 cases passed (4 ms)
5-
* Your runtime beats 74.14 % of golang submissions
6-
* Your memory usage beats 45.45 % of golang submissions (3 MB)
7-
*/
81
func nextGreatestLetter(letters []byte, target byte) byte {
9-
l, m, r := 0, 0, len(letters)
10-
for l < r {
11-
m = (r + l) / 2
12-
if letters[m] <= target {
13-
l = m + 1
2+
left, right := 0, len(letters)
3+
for left < right {
4+
mid := (left + right) >> 1
5+
if letters[mid] > target {
6+
right = mid
147
} else {
15-
r = m
8+
left = mid + 1
169
}
1710
}
18-
return letters[l%len(letters)]
11+
return letters[left%len(letters)]
1912
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public char nextGreatestLetter(char[] letters, char target) {
3+
int left = 0, right = letters.length;
4+
while (left < right) {
5+
int mid = (left + right) >> 1;
6+
if (letters[mid] > target) {
7+
right = mid;
8+
} else {
9+
left = mid + 1;
10+
}
11+
}
12+
return letters[left % letters.length];
13+
}
14+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def nextGreatestLetter(self, letters: List[str], target: str) -> str:
3+
left, right = 0, len(letters)
4+
while left < right:
5+
mid = (left + right) >> 1
6+
if ord(letters[mid]) > ord(target):
7+
right = mid
8+
else:
9+
left = mid + 1
10+
return letters[left % len(letters)]

0 commit comments

Comments
 (0)