Skip to content

Commit 4adaba2

Browse files
committed
feat: add solutions to lcci problems: No.10.05,10.09
1 parent 4857958 commit 4adaba2

File tree

12 files changed

+338
-21
lines changed

12 files changed

+338
-21
lines changed

lcci/10.05.Sparse Array Search/README.md

+70-1
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,84 @@
3737
<!-- 这里可写当前语言的特殊实现逻辑 -->
3838

3939
```python
40-
40+
class Solution:
41+
def findString(self, words: List[str], s: str) -> int:
42+
left, right = 0, len(words) - 1
43+
while left < right:
44+
mid = (left + right) >> 1
45+
while left < mid and words[mid] == '':
46+
mid -= 1
47+
if s <= words[mid]:
48+
right = mid
49+
else:
50+
left = mid + 1
51+
return -1 if words[left] != s else left
4152
```
4253

4354
### **Java**
4455

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

4758
```java
59+
class Solution {
60+
public int findString(String[] words, String s) {
61+
int left = 0, right = words.length - 1;
62+
while (left < right) {
63+
int mid = (left + right) >> 1;
64+
while (left < mid && "".equals(words[mid])) {
65+
--mid;
66+
}
67+
if (s.compareTo(words[mid]) <= 0) {
68+
right = mid;
69+
} else {
70+
left = mid + 1;
71+
}
72+
}
73+
return s.equals(words[left]) ? left : -1;
74+
}
75+
}
76+
```
77+
78+
### **C++**
79+
80+
```cpp
81+
class Solution {
82+
public:
83+
int findString(vector<string>& words, string s) {
84+
int left = 0, right = words.size() - 1;
85+
while (left < right)
86+
{
87+
int mid = left + right >> 1;
88+
while (left < mid && words[mid] == "") --mid;
89+
if (s <= words[mid]) right = mid;
90+
else left = mid + 1;
91+
}
92+
return words[left] == s ? left : -1;
93+
}
94+
};
95+
```
4896
97+
### **Go**
98+
99+
```go
100+
func findString(words []string, s string) int {
101+
left, right := 0, len(words)-1
102+
for left < right {
103+
mid := (left + right) >> 1
104+
for left < mid && words[mid] == "" {
105+
mid--
106+
}
107+
if s <= words[mid] {
108+
right = mid
109+
} else {
110+
left = mid + 1
111+
}
112+
}
113+
if words[left] == s {
114+
return left
115+
}
116+
return -1
117+
}
49118
```
50119

51120
### **...**

lcci/10.05.Sparse Array Search/README_EN.md

+70-1
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,82 @@
3939
### **Python3**
4040

4141
```python
42-
42+
class Solution:
43+
def findString(self, words: List[str], s: str) -> int:
44+
left, right = 0, len(words) - 1
45+
while left < right:
46+
mid = (left + right) >> 1
47+
while left < mid and words[mid] == '':
48+
mid -= 1
49+
if s <= words[mid]:
50+
right = mid
51+
else:
52+
left = mid + 1
53+
return -1 if words[left] != s else left
4354
```
4455

4556
### **Java**
4657

4758
```java
59+
class Solution {
60+
public int findString(String[] words, String s) {
61+
int left = 0, right = words.length - 1;
62+
while (left < right) {
63+
int mid = (left + right) >> 1;
64+
while (left < mid && "".equals(words[mid])) {
65+
--mid;
66+
}
67+
if (s.compareTo(words[mid]) <= 0) {
68+
right = mid;
69+
} else {
70+
left = mid + 1;
71+
}
72+
}
73+
return s.equals(words[left]) ? left : -1;
74+
}
75+
}
76+
```
77+
78+
### **C++**
79+
80+
```cpp
81+
class Solution {
82+
public:
83+
int findString(vector<string>& words, string s) {
84+
int left = 0, right = words.size() - 1;
85+
while (left < right)
86+
{
87+
int mid = left + right >> 1;
88+
while (left < mid && words[mid] == "") --mid;
89+
if (s <= words[mid]) right = mid;
90+
else left = mid + 1;
91+
}
92+
return words[left] == s ? left : -1;
93+
}
94+
};
95+
```
4896
97+
### **Go**
98+
99+
```go
100+
func findString(words []string, s string) int {
101+
left, right := 0, len(words)-1
102+
for left < right {
103+
mid := (left + right) >> 1
104+
for left < mid && words[mid] == "" {
105+
mid--
106+
}
107+
if s <= words[mid] {
108+
right = mid
109+
} else {
110+
left = mid + 1
111+
}
112+
}
113+
if words[left] == s {
114+
return left
115+
}
116+
return -1
117+
}
49118
```
50119

51120
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
int findString(vector<string>& words, string s) {
4+
int left = 0, right = words.size() - 1;
5+
while (left < right)
6+
{
7+
int mid = left + right >> 1;
8+
while (left < mid && words[mid] == "") --mid;
9+
if (s <= words[mid]) right = mid;
10+
else left = mid + 1;
11+
}
12+
return words[left] == s ? left : -1;
13+
}
14+
};
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
func findString(words []string, s string) int {
2+
left, right := 0, len(words)-1
3+
for left < right {
4+
mid := (left + right) >> 1
5+
for left < mid && words[mid] == "" {
6+
mid--
7+
}
8+
if s <= words[mid] {
9+
right = mid
10+
} else {
11+
left = mid + 1
12+
}
13+
}
14+
if words[left] == s {
15+
return left
16+
}
17+
return -1
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int findString(String[] words, String s) {
3+
int left = 0, right = words.length - 1;
4+
while (left < right) {
5+
int mid = (left + right) >> 1;
6+
while (left < mid && "".equals(words[mid])) {
7+
--mid;
8+
}
9+
if (s.compareTo(words[mid]) <= 0) {
10+
right = mid;
11+
} else {
12+
left = mid + 1;
13+
}
14+
}
15+
return s.equals(words[left]) ? left : -1;
16+
}
17+
}
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def findString(self, words: List[str], s: str) -> int:
3+
left, right = 0, len(words) - 1
4+
while left < right:
5+
mid = (left + right) >> 1
6+
while left < mid and words[mid] == '':
7+
mid -= 1
8+
if s <= words[mid]:
9+
right = mid
10+
else:
11+
left = mid + 1
12+
return -1 if words[left] != s else left

lcci/10.09.Sorted Matrix Search/README.md

+49-6
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ class Solution:
4141
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
4242
if not matrix or not matrix[0]:
4343
return False
44-
rows, cols = len(matrix), len(matrix[0])
45-
i, j = rows - 1, 0
46-
while i >= 0 and j < cols:
44+
m, n = len(matrix), len(matrix[0])
45+
i, j = m - 1, 0
46+
while i >= 0 and j < n:
4747
if matrix[i][j] == target:
4848
return True
4949
if matrix[i][j] > target:
@@ -64,9 +64,9 @@ class Solution {
6464
if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) {
6565
return false;
6666
}
67-
int rows = matrix.length, cols = matrix[0].length;
68-
int i = rows - 1, j = 0;
69-
while (i >= 0 && j < cols) {
67+
int m = matrix.length, n = matrix[0].length;
68+
int i = m - 1, j = 0;
69+
while (i >= 0 && j < n) {
7070
if (matrix[i][j] == target) {
7171
return true;
7272
}
@@ -81,6 +81,49 @@ class Solution {
8181
}
8282
```
8383

84+
### **C++**
85+
86+
```cpp
87+
class Solution {
88+
public:
89+
bool searchMatrix(vector<vector<int>>& matrix, int target) {
90+
if (matrix.size() == 0 || matrix[0].size() == 0) return false;
91+
int m = matrix.size(), n = matrix[0].size();
92+
int i = m - 1, j = 0;
93+
while (i >= 0 && j < n)
94+
{
95+
if (matrix[i][j] == target) return true;
96+
if (matrix[i][j] > target) --i;
97+
else ++j;
98+
}
99+
return false;
100+
}
101+
};
102+
```
103+
104+
### **Go**
105+
106+
```go
107+
func searchMatrix(matrix [][]int, target int) bool {
108+
if len(matrix) == 0 || len(matrix[0]) == 0 {
109+
return false
110+
}
111+
m, n := len(matrix), len(matrix[0])
112+
i, j := m-1, 0
113+
for i >= 0 && j < n {
114+
if matrix[i][j] == target {
115+
return true
116+
}
117+
if matrix[i][j] > target {
118+
i--
119+
} else {
120+
j++
121+
}
122+
}
123+
return false
124+
}
125+
```
126+
84127
### **...**
85128

86129
```

lcci/10.09.Sorted Matrix Search/README_EN.md

+49-7
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,16 @@ class Solution:
4343
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
4444
if not matrix or not matrix[0]:
4545
return False
46-
rows, cols = len(matrix), len(matrix[0])
47-
i, j = rows - 1, 0
48-
while i >= 0 and j < cols:
46+
m, n = len(matrix), len(matrix[0])
47+
i, j = m - 1, 0
48+
while i >= 0 and j < n:
4949
if matrix[i][j] == target:
5050
return True
5151
if matrix[i][j] > target:
5252
i -= 1
5353
else:
5454
j += 1
5555
return False
56-
5756
```
5857

5958
### **Java**
@@ -64,9 +63,9 @@ class Solution {
6463
if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) {
6564
return false;
6665
}
67-
int rows = matrix.length, cols = matrix[0].length;
68-
int i = rows - 1, j = 0;
69-
while (i >= 0 && j < cols) {
66+
int m = matrix.length, n = matrix[0].length;
67+
int i = m - 1, j = 0;
68+
while (i >= 0 && j < n) {
7069
if (matrix[i][j] == target) {
7170
return true;
7271
}
@@ -81,6 +80,49 @@ class Solution {
8180
}
8281
```
8382

83+
### **C++**
84+
85+
```cpp
86+
class Solution {
87+
public:
88+
bool searchMatrix(vector<vector<int>>& matrix, int target) {
89+
if (matrix.size() == 0 || matrix[0].size() == 0) return false;
90+
int m = matrix.size(), n = matrix[0].size();
91+
int i = m - 1, j = 0;
92+
while (i >= 0 && j < n)
93+
{
94+
if (matrix[i][j] == target) return true;
95+
if (matrix[i][j] > target) --i;
96+
else ++j;
97+
}
98+
return false;
99+
}
100+
};
101+
```
102+
103+
### **Go**
104+
105+
```go
106+
func searchMatrix(matrix [][]int, target int) bool {
107+
if len(matrix) == 0 || len(matrix[0]) == 0 {
108+
return false
109+
}
110+
m, n := len(matrix), len(matrix[0])
111+
i, j := m-1, 0
112+
for i >= 0 && j < n {
113+
if matrix[i][j] == target {
114+
return true
115+
}
116+
if matrix[i][j] > target {
117+
i--
118+
} else {
119+
j++
120+
}
121+
}
122+
return false
123+
}
124+
```
125+
84126
### **...**
85127

86128
```

0 commit comments

Comments
 (0)