Skip to content

Commit e934412

Browse files
committed
feat: add solutions to lc problem: No.0704. Binary Search
1 parent aafa116 commit e934412

File tree

6 files changed

+153
-47
lines changed

6 files changed

+153
-47
lines changed

solution/0700-0799/0704.Binary Search/README.md

+56-10
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@
4545
<!-- 这里可写当前语言的特殊实现逻辑 -->
4646

4747
```python
48-
48+
class Solution:
49+
def search(self, nums: List[int], target: int) -> int:
50+
left, right = 0, len(nums) - 1
51+
while left < right:
52+
mid = (left + right) >> 1
53+
if nums[mid] >= target:
54+
right = mid
55+
else:
56+
left = mid + 1
57+
return left if nums[left] == target else -1
4958
```
5059

5160
### **Java**
@@ -55,20 +64,57 @@
5564
```java
5665
class Solution {
5766
public int search(int[] nums, int target) {
58-
int low = 0, high = nums.length - 1;
59-
while (low <= high) {
60-
int mid = (low + high) >>> 1;
61-
if (nums[mid] == target) {
62-
return mid;
67+
int left = 0, right = nums.length - 1;
68+
while (left < right) {
69+
int mid = (left + right) >> 1;
70+
if (nums[mid] >= target) {
71+
right = mid;
72+
} else {
73+
left = mid + 1;
6374
}
64-
if (nums[mid] < target) {
65-
low = mid + 1;
75+
}
76+
return nums[left] == target ? left : -1;
77+
}
78+
}
79+
```
80+
81+
### **C++**
82+
83+
```cpp
84+
class Solution {
85+
public:
86+
int search(vector<int>& nums, int target) {
87+
int left = 0, right = nums.size() - 1;
88+
while (left < right) {
89+
int mid = left + right >> 1;
90+
if (nums[mid] >= target) {
91+
right = mid;
6692
} else {
67-
high = mid - 1;
93+
left = mid + 1;
6894
}
6995
}
70-
return -1;
96+
return nums[left] == target ? left : -1;
7197
}
98+
};
99+
```
100+
101+
### **Go**
102+
103+
```go
104+
func search(nums []int, target int) int {
105+
left, right := 0, len(nums)-1
106+
for left < right {
107+
mid := (left + right) >> 1
108+
if nums[mid] >= target {
109+
right = mid
110+
} else {
111+
left = mid + 1
112+
}
113+
}
114+
if nums[left] == target {
115+
return left
116+
}
117+
return -1
72118
}
73119
```
74120

solution/0700-0799/0704.Binary Search/README_EN.md

+53-18
Original file line numberDiff line numberDiff line change
@@ -43,37 +43,72 @@
4343
```python
4444
class Solution:
4545
def search(self, nums: List[int], target: int) -> int:
46-
low, high = 0, len(nums) - 1
47-
while low <= high:
48-
mid = (low + high) >> 1
49-
if nums[mid] == target:
50-
return mid
51-
if nums[mid] < target:
52-
low = mid + 1
46+
left, right = 0, len(nums) - 1
47+
while left < right:
48+
mid = (left + right) >> 1
49+
if nums[mid] >= target:
50+
right = mid
5351
else:
54-
high = mid - 1
55-
return -1
52+
left = mid + 1
53+
return left if nums[left] == target else -1
5654
```
5755

5856
### **Java**
5957

6058
```java
6159
class Solution {
6260
public int search(int[] nums, int target) {
63-
int low = 0, high = nums.length - 1;
64-
while (low <= high) {
65-
int mid = (low + high) >>> 1;
66-
if (nums[mid] == target) {
67-
return mid;
61+
int left = 0, right = nums.length - 1;
62+
while (left < right) {
63+
int mid = (left + right) >> 1;
64+
if (nums[mid] >= target) {
65+
right = mid;
66+
} else {
67+
left = mid + 1;
6868
}
69-
if (nums[mid] < target) {
70-
low = mid + 1;
69+
}
70+
return nums[left] == target ? left : -1;
71+
}
72+
}
73+
```
74+
75+
### **C++**
76+
77+
```cpp
78+
class Solution {
79+
public:
80+
int search(vector<int>& nums, int target) {
81+
int left = 0, right = nums.size() - 1;
82+
while (left < right) {
83+
int mid = left + right >> 1;
84+
if (nums[mid] >= target) {
85+
right = mid;
7186
} else {
72-
high = mid - 1;
87+
left = mid + 1;
7388
}
7489
}
75-
return -1;
90+
return nums[left] == target ? left : -1;
7691
}
92+
};
93+
```
94+
95+
### **Go**
96+
97+
```go
98+
func search(nums []int, target int) int {
99+
left, right := 0, len(nums)-1
100+
for left < right {
101+
mid := (left + right) >> 1
102+
if nums[mid] >= target {
103+
right = mid
104+
} else {
105+
left = mid + 1
106+
}
107+
}
108+
if nums[left] == target {
109+
return left
110+
}
111+
return -1
77112
}
78113
```
79114

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int search(vector<int>& nums, int target) {
4+
int left = 0, right = nums.size() - 1;
5+
while (left < right) {
6+
int mid = left + right >> 1;
7+
if (nums[mid] >= target) {
8+
right = mid;
9+
} else {
10+
left = mid + 1;
11+
}
12+
}
13+
return nums[left] == target ? left : -1;
14+
}
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
func search(nums []int, target int) int {
2+
left, right := 0, len(nums)-1
3+
for left < right {
4+
mid := (left + right) >> 1
5+
if nums[mid] >= target {
6+
right = mid
7+
} else {
8+
left = mid + 1
9+
}
10+
}
11+
if nums[left] == target {
12+
return left
13+
}
14+
return -1
15+
}
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
class Solution {
22
public int search(int[] nums, int target) {
3-
int low = 0, high = nums.length - 1;
4-
while (low <= high) {
5-
int mid = (low + high) >>> 1;
6-
if (nums[mid] == target) {
7-
return mid;
8-
}
9-
if (nums[mid] < target) {
10-
low = mid + 1;
3+
int left = 0, right = nums.length - 1;
4+
while (left < right) {
5+
int mid = (left + right) >> 1;
6+
if (nums[mid] >= target) {
7+
right = mid;
118
} else {
12-
high = mid - 1;
9+
left = mid + 1;
1310
}
1411
}
15-
return -1;
12+
return nums[left] == target ? left : -1;
1613
}
1714
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
class Solution:
22
def search(self, nums: List[int], target: int) -> int:
3-
low, high = 0, len(nums) - 1
4-
while low <= high:
5-
mid = (low + high) >> 1
6-
if nums[mid] == target:
7-
return mid
8-
if nums[mid] < target:
9-
low = mid + 1
3+
left, right = 0, len(nums) - 1
4+
while left < right:
5+
mid = (left + right) >> 1
6+
if nums[mid] >= target:
7+
right = mid
108
else:
11-
high = mid - 1
12-
return -1
9+
left = mid + 1
10+
return left if nums[left] == target else -1

0 commit comments

Comments
 (0)