Skip to content

Commit 4f900a6

Browse files
committed
feat: add solutions to lc problem: No.0702. Search in a Sorted Array of Unknown Size
1 parent f4cbbce commit 4f900a6

File tree

6 files changed

+296
-4
lines changed

6 files changed

+296
-4
lines changed

solution/0700-0799/0702.Search in a Sorted Array of Unknown Size/README.md

+103-2
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,128 @@
3434
<li>数组元素的值域是&nbsp;<code>[-9999, 9999]</code>。</li>
3535
</ol>
3636

37-
3837
## 解法
3938

4039
<!-- 这里可写通用的实现逻辑 -->
4140

41+
二分法。
42+
4243
<!-- tabs:start -->
4344

4445
### **Python3**
4546

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

4849
```python
49-
50+
# """
51+
# This is ArrayReader's API interface.
52+
# You should not implement it, or speculate about its implementation
53+
# """
54+
#class ArrayReader:
55+
# def get(self, index: int) -> int:
56+
57+
class Solution:
58+
def search(self, reader, target):
59+
"""
60+
:type reader: ArrayReader
61+
:type target: int
62+
:rtype: int
63+
"""
64+
left, right = 0, 20000
65+
while left < right:
66+
mid = (left + right) >> 1
67+
if reader.get(mid) >= target:
68+
right = mid
69+
else:
70+
left = mid + 1
71+
return left if reader.get(left) == target else -1
5072
```
5173

5274
### **Java**
5375

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

5678
```java
79+
/**
80+
* // This is ArrayReader's API interface.
81+
* // You should not implement it, or speculate about its implementation
82+
* interface ArrayReader {
83+
* public int get(int index) {}
84+
* }
85+
*/
86+
87+
class Solution {
88+
public int search(ArrayReader reader, int target) {
89+
int left = 0, right = 20000;
90+
while (left < right) {
91+
int mid = left + right >> 1;
92+
if (reader.get(mid) >= target) {
93+
right = mid;
94+
} else {
95+
left = mid + 1;
96+
}
97+
}
98+
return reader.get(left) == target ? left : -1;
99+
}
100+
}
101+
```
102+
103+
### **C++**
104+
105+
```cpp
106+
/**
107+
* // This is the ArrayReader's API interface.
108+
* // You should not implement it, or speculate about its implementation
109+
* class ArrayReader {
110+
* public:
111+
* int get(int index);
112+
* };
113+
*/
114+
115+
class Solution {
116+
public:
117+
int search(const ArrayReader& reader, int target) {
118+
int left = 0, right = 20000;
119+
while (left < right) {
120+
int mid = left + right >> 1;
121+
if (reader.get(mid) >= target) {
122+
right = mid;
123+
} else {
124+
left = mid + 1;
125+
}
126+
}
127+
return reader.get(left) == target ? left : -1;
128+
}
129+
};
130+
```
57131
132+
### **Go**
133+
134+
```go
135+
/**
136+
* // This is the ArrayReader's API interface.
137+
* // You should not implement it, or speculate about its implementation
138+
* type ArrayReader struct {
139+
* }
140+
*
141+
* func (this *ArrayReader) get(index int) int {}
142+
*/
143+
144+
func search(reader ArrayReader, target int) int {
145+
left, right := 0, 20000
146+
for left < right {
147+
mid := (left + right) >> 1
148+
if reader.get(mid) >= target {
149+
right = mid
150+
} else {
151+
left = mid + 1
152+
}
153+
}
154+
if reader.get(left) == target {
155+
return left
156+
}
157+
return -1
158+
}
58159
```
59160

60161
### **...**

solution/0700-0799/0702.Search in a Sorted Array of Unknown Size/README_EN.md

+101-2
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,120 @@
3535
<li>The length of the array will be in the range <code>[1, 10^4]</code>.</li>
3636
</ul>
3737

38-
3938
## Solutions
4039

4140
<!-- tabs:start -->
4241

4342
### **Python3**
4443

4544
```python
46-
45+
# """
46+
# This is ArrayReader's API interface.
47+
# You should not implement it, or speculate about its implementation
48+
# """
49+
#class ArrayReader:
50+
# def get(self, index: int) -> int:
51+
52+
class Solution:
53+
def search(self, reader, target):
54+
"""
55+
:type reader: ArrayReader
56+
:type target: int
57+
:rtype: int
58+
"""
59+
left, right = 0, 20000
60+
while left < right:
61+
mid = (left + right) >> 1
62+
if reader.get(mid) >= target:
63+
right = mid
64+
else:
65+
left = mid + 1
66+
return left if reader.get(left) == target else -1
4767
```
4868

4969
### **Java**
5070

5171
```java
72+
/**
73+
* // This is ArrayReader's API interface.
74+
* // You should not implement it, or speculate about its implementation
75+
* interface ArrayReader {
76+
* public int get(int index) {}
77+
* }
78+
*/
79+
80+
class Solution {
81+
public int search(ArrayReader reader, int target) {
82+
int left = 0, right = 20000;
83+
while (left < right) {
84+
int mid = left + right >> 1;
85+
if (reader.get(mid) >= target) {
86+
right = mid;
87+
} else {
88+
left = mid + 1;
89+
}
90+
}
91+
return reader.get(left) == target ? left : -1;
92+
}
93+
}
94+
```
95+
96+
### **C++**
97+
98+
```cpp
99+
/**
100+
* // This is the ArrayReader's API interface.
101+
* // You should not implement it, or speculate about its implementation
102+
* class ArrayReader {
103+
* public:
104+
* int get(int index);
105+
* };
106+
*/
107+
108+
class Solution {
109+
public:
110+
int search(const ArrayReader& reader, int target) {
111+
int left = 0, right = 20000;
112+
while (left < right) {
113+
int mid = left + right >> 1;
114+
if (reader.get(mid) >= target) {
115+
right = mid;
116+
} else {
117+
left = mid + 1;
118+
}
119+
}
120+
return reader.get(left) == target ? left : -1;
121+
}
122+
};
123+
```
52124
125+
### **Go**
126+
127+
```go
128+
/**
129+
* // This is the ArrayReader's API interface.
130+
* // You should not implement it, or speculate about its implementation
131+
* type ArrayReader struct {
132+
* }
133+
*
134+
* func (this *ArrayReader) get(index int) int {}
135+
*/
136+
137+
func search(reader ArrayReader, target int) int {
138+
left, right := 0, 20000
139+
for left < right {
140+
mid := (left + right) >> 1
141+
if reader.get(mid) >= target {
142+
right = mid
143+
} else {
144+
left = mid + 1
145+
}
146+
}
147+
if reader.get(left) == target {
148+
return left
149+
}
150+
return -1
151+
}
53152
```
54153

55154
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* // This is the ArrayReader's API interface.
3+
* // You should not implement it, or speculate about its implementation
4+
* class ArrayReader {
5+
* public:
6+
* int get(int index);
7+
* };
8+
*/
9+
10+
class Solution {
11+
public:
12+
int search(const ArrayReader& reader, int target) {
13+
int left = 0, right = 20000;
14+
while (left < right) {
15+
int mid = left + right >> 1;
16+
if (reader.get(mid) >= target) {
17+
right = mid;
18+
} else {
19+
left = mid + 1;
20+
}
21+
}
22+
return reader.get(left) == target ? left : -1;
23+
}
24+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* // This is the ArrayReader's API interface.
3+
* // You should not implement it, or speculate about its implementation
4+
* type ArrayReader struct {
5+
* }
6+
*
7+
* func (this *ArrayReader) get(index int) int {}
8+
*/
9+
10+
func search(reader ArrayReader, target int) int {
11+
left, right := 0, 20000
12+
for left < right {
13+
mid := (left + right) >> 1
14+
if reader.get(mid) >= target {
15+
right = mid
16+
} else {
17+
left = mid + 1
18+
}
19+
}
20+
if reader.get(left) == target {
21+
return left
22+
}
23+
return -1
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* // This is ArrayReader's API interface.
3+
* // You should not implement it, or speculate about its implementation
4+
* interface ArrayReader {
5+
* public int get(int index) {}
6+
* }
7+
*/
8+
9+
class Solution {
10+
public int search(ArrayReader reader, int target) {
11+
int left = 0, right = 20000;
12+
while (left < right) {
13+
int mid = left + right >> 1;
14+
if (reader.get(mid) >= target) {
15+
right = mid;
16+
} else {
17+
left = mid + 1;
18+
}
19+
}
20+
return reader.get(left) == target ? left : -1;
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# """
2+
# This is ArrayReader's API interface.
3+
# You should not implement it, or speculate about its implementation
4+
# """
5+
#class ArrayReader:
6+
# def get(self, index: int) -> int:
7+
8+
class Solution:
9+
def search(self, reader, target):
10+
"""
11+
:type reader: ArrayReader
12+
:type target: int
13+
:rtype: int
14+
"""
15+
left, right = 0, 20000
16+
while left < right:
17+
mid = (left + right) >> 1
18+
if reader.get(mid) >= target:
19+
right = mid
20+
else:
21+
left = mid + 1
22+
return left if reader.get(left) == target else -1

0 commit comments

Comments
 (0)