Skip to content

Commit b836cee

Browse files
committed
feat: add solutions to lcof2 problem: No.070.Single Element in a Sorted Array
1 parent e59844a commit b836cee

File tree

13 files changed

+235
-46
lines changed

13 files changed

+235
-46
lines changed

lcof2/剑指 Offer II 070. 排序数组中只出现一次的数字/README.md

+117
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,139 @@
4848

4949
<!-- 这里可写通用的实现逻辑 -->
5050

51+
二分查找。
52+
5153
<!-- tabs:start -->
5254

5355
### **Python3**
5456

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

5759
```python
60+
class Solution:
61+
def singleNonDuplicate(self, nums: List[int]) -> int:
62+
left, right = 0, len(nums) - 1
63+
while left < right:
64+
mid = (left + right) >> 1
65+
if (mid & 1) == 1:
66+
mid -= 1
67+
if nums[mid] == nums[mid + 1]:
68+
left = mid + 2
69+
else:
70+
right = mid
71+
return nums[left]
72+
```
5873

74+
```python
75+
class Solution:
76+
def singleNonDuplicate(self, nums: List[int]) -> int:
77+
left, right = 0, len(nums) - 1
78+
while left < right:
79+
mid = (left + right) >> 1
80+
if (mid % 2 == 0 and nums[mid] != nums[mid + 1]) or (mid % 2 != 0 and nums[mid] != nums[mid - 1]):
81+
right = mid
82+
else:
83+
left = mid + 1
84+
return nums[left]
5985
```
6086

6187
### **Java**
6288

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

6591
```java
92+
class Solution {
93+
public int singleNonDuplicate(int[] nums) {
94+
int left = 0, right = nums.length - 1;
95+
while (left < right) {
96+
int mid = (left + right) >>> 1;
97+
if ((mid & 1) == 1) {
98+
--mid;
99+
}
100+
if (nums[mid] == nums[mid + 1]) {
101+
left = mid + 2;
102+
} else {
103+
right = mid;
104+
}
105+
}
106+
return nums[left];
107+
}
108+
}
109+
```
110+
111+
```java
112+
class Solution {
113+
public int singleNonDuplicate(int[] nums) {
114+
int left = 0, right = nums.length - 1;
115+
while (left < right) {
116+
int mid = (left + right) >> 1;
117+
if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 != 0 && nums[mid] != nums[mid - 1])) {
118+
right = mid;
119+
} else {
120+
left = mid + 1;
121+
}
122+
}
123+
return nums[left];
124+
}
125+
}
126+
```
127+
128+
### **TypeScript**
129+
130+
```ts
131+
function singleNonDuplicate(nums: number[]): number {
132+
let left = 0, right = nums.length - 1;
133+
while (left < right) {
134+
let mid = (left + right) >> 1;
135+
if ((mid & 1) == 1) --mid;
136+
if (nums[mid] == nums[mid + 1]) {
137+
left = mid + 2;
138+
} else {
139+
right = mid;
140+
}
141+
}
142+
return nums[left];
143+
};
144+
```
145+
146+
### **C++**
147+
148+
```cpp
149+
class Solution {
150+
public:
151+
int singleNonDuplicate(vector<int> &nums) {
152+
int left = 0, right = nums.size() - 1;
153+
while (left < right)
154+
{
155+
int mid = left + right >> 1;
156+
if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 != 0 && nums[mid] != nums[mid - 1]))
157+
right = mid;
158+
else
159+
left = mid + 1;
160+
}
161+
return nums[left];
162+
}
163+
};
164+
```
66165
166+
### **Go**
167+
168+
```go
169+
func singleNonDuplicate(nums []int) int {
170+
left, right := 0, len(nums)-1
171+
for left < right {
172+
mid := (left + right) >> 1
173+
if (mid & 1) == 1 {
174+
mid--
175+
}
176+
if nums[mid] == nums[mid+1] {
177+
left = mid + 2
178+
} else {
179+
right = mid
180+
}
181+
}
182+
return nums[left]
183+
}
67184
```
68185

69186
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int singleNonDuplicate(vector<int> &nums) {
4+
int left = 0, right = nums.size() - 1;
5+
while (left < right)
6+
{
7+
int mid = left + right >> 1;
8+
if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 != 0 && nums[mid] != nums[mid - 1]))
9+
right = mid;
10+
else
11+
left = mid + 1;
12+
}
13+
return nums[left];
14+
}
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
func singleNonDuplicate(nums []int) int {
2+
left, right := 0, len(nums)-1
3+
for left < right {
4+
mid := (left + right) >> 1
5+
if (mid & 1) == 1 {
6+
mid--
7+
}
8+
if nums[mid] == nums[mid+1] {
9+
left = mid + 2
10+
} else {
11+
right = mid
12+
}
13+
}
14+
return nums[left]
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int singleNonDuplicate(int[] nums) {
3+
int left = 0, right = nums.length - 1;
4+
while (left < right) {
5+
int mid = (left + right) >>> 1;
6+
if ((mid & 1) == 1) {
7+
--mid;
8+
}
9+
if (nums[mid] == nums[mid + 1]) {
10+
left = mid + 2;
11+
} else {
12+
right = mid;
13+
}
14+
}
15+
return nums[left];
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def singleNonDuplicate(self, nums: List[int]) -> int:
3+
left, right = 0, len(nums) - 1
4+
while left < right:
5+
mid = (left + right) >> 1
6+
if (mid & 1) == 1:
7+
mid -= 1
8+
if nums[mid] == nums[mid + 1]:
9+
left = mid + 2
10+
else:
11+
right = mid
12+
return nums[left]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
function singleNonDuplicate(nums: number[]): number {
2+
let left = 0, right = nums.length - 1;
3+
while (left < right) {
4+
let mid = (left + right) >> 1;
5+
if ((mid & 1) == 1) --mid;
6+
if (nums[mid] == nums[mid + 1]) {
7+
left = mid + 2;
8+
} else {
9+
right = mid;
10+
}
11+
}
12+
return nums[left];
13+
};

lcof2/剑指 Offer II 072. 求平方根/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public:
9999
func mySqrt(x int) int {
100100
left, right := 0, x
101101
for left < right {
102-
mid = left + (right-left+1)>>1
102+
mid := left + (right-left+1)>>1
103103
if mid <= x/mid {
104104
left = mid
105105
} else {

lcof2/剑指 Offer II 072. 求平方根/Solution.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
func mySqrt(x int) int {
22
left, right := 0, x
33
for left < right {
4-
mid = left + (right-left+1)>>1
4+
mid := left + (right-left+1)>>1
55
if mid <= x/mid {
66
left = mid
77
} else {

solution/0000-0099/0069.Sqrt(x)/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public:
9999
func mySqrt(x int) int {
100100
left, right := 0, x
101101
for left < right {
102-
mid = left + (right-left+1)>>1
102+
mid := left + (right-left+1)>>1
103103
if mid <= x/mid {
104104
left = mid
105105
} else {

solution/0000-0099/0069.Sqrt(x)/README_EN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public:
9797
func mySqrt(x int) int {
9898
left, right := 0, x
9999
for left < right {
100-
mid = left + (right-left+1)>>1
100+
mid := left + (right-left+1)>>1
101101
if mid <= x/mid {
102102
left = mid
103103
} else {

solution/0000-0099/0069.Sqrt(x)/Solution.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
func mySqrt(x int) int {
22
left, right := 0, x
33
for left < right {
4-
mid = left + (right-left+1)>>1
4+
mid := left + (right-left+1)>>1
55
if mid <= x/mid {
66
left = mid
77
} else {

solution/0500-0599/0540.Single Element in a Sorted Array/README.md

+21-21
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
<!-- 这里可写通用的实现逻辑 -->
3131

32-
二分法
32+
二分查找。
3333

3434
<!-- tabs:start -->
3535

@@ -124,26 +124,6 @@ function singleNonDuplicate(nums: number[]): number {
124124
};
125125
```
126126

127-
### **Go**
128-
129-
```go
130-
func singleNonDuplicate(nums []int) int {
131-
left, right := 0, len(nums)-1
132-
for left < right {
133-
mid := (left + right) >> 1
134-
if (mid & 1) == 1 {
135-
mid--
136-
}
137-
if nums[mid] == nums[mid+1] {
138-
left = mid + 2
139-
} else {
140-
right = mid
141-
}
142-
}
143-
return nums[left]
144-
}
145-
```
146-
147127
### **C++**
148128

149129
```cpp
@@ -164,6 +144,26 @@ public:
164144
};
165145
```
166146
147+
### **Go**
148+
149+
```go
150+
func singleNonDuplicate(nums []int) int {
151+
left, right := 0, len(nums)-1
152+
for left < right {
153+
mid := (left + right) >> 1
154+
if (mid & 1) == 1 {
155+
mid--
156+
}
157+
if nums[mid] == nums[mid+1] {
158+
left = mid + 2
159+
} else {
160+
right = mid
161+
}
162+
}
163+
return nums[left]
164+
}
165+
```
166+
167167
### **...**
168168

169169
```

solution/0500-0599/0540.Single Element in a Sorted Array/README_EN.md

+20-20
Original file line numberDiff line numberDiff line change
@@ -131,26 +131,6 @@ function singleNonDuplicate(nums: number[]): number {
131131
};
132132
```
133133

134-
### **Go**
135-
136-
```go
137-
func singleNonDuplicate(nums []int) int {
138-
left, right := 0, len(nums)-1
139-
for left < right {
140-
mid := (left + right) >> 1
141-
if (mid & 1) == 1 {
142-
mid--
143-
}
144-
if nums[mid] == nums[mid+1] {
145-
left = mid + 2
146-
} else {
147-
right = mid
148-
}
149-
}
150-
return nums[left]
151-
}
152-
```
153-
154134
### **C++**
155135

156136
```cpp
@@ -171,6 +151,26 @@ public:
171151
};
172152
```
173153
154+
### **Go**
155+
156+
```go
157+
func singleNonDuplicate(nums []int) int {
158+
left, right := 0, len(nums)-1
159+
for left < right {
160+
mid := (left + right) >> 1
161+
if (mid & 1) == 1 {
162+
mid--
163+
}
164+
if nums[mid] == nums[mid+1] {
165+
left = mid + 2
166+
} else {
167+
right = mid
168+
}
169+
}
170+
return nums[left]
171+
}
172+
```
173+
174174
### **...**
175175

176176
```

0 commit comments

Comments
 (0)