Skip to content

Commit 3b416ca

Browse files
committed
feat: update solutions to lc problem: No.0540
No.0540.Single Element in a Sorted Array
1 parent a4cb2e5 commit 3b416ca

File tree

7 files changed

+49
-134
lines changed

7 files changed

+49
-134
lines changed

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

+14-53
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,8 @@ class Solution:
4242
left, right = 0, len(nums) - 1
4343
while left < right:
4444
mid = (left + right) >> 1
45-
if (mid & 1) == 1:
46-
mid -= 1
47-
if nums[mid] == nums[mid + 1]:
48-
left = mid + 2
49-
else:
50-
right = mid
51-
return nums[left]
52-
```
53-
54-
```python
55-
class Solution:
56-
def singleNonDuplicate(self, nums: List[int]) -> int:
57-
left, right = 0, len(nums) - 1
58-
while left < right:
59-
mid = (left + right) >> 1
60-
if (mid % 2 == 0 and nums[mid] != nums[mid + 1]) or (mid % 2 != 0 and nums[mid] != nums[mid - 1]):
45+
# Equals to: if (mid % 2 == 0 and nums[mid] != nums[mid + 1]) or (mid % 2 == 1 and nums[mid] != nums[mid - 1]):
46+
if nums[mid] != nums[mid ^ 1]:
6147
right = mid
6248
else:
6349
left = mid + 1
@@ -68,33 +54,14 @@ class Solution:
6854

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

71-
```java
72-
class Solution {
73-
public int singleNonDuplicate(int[] nums) {
74-
int left = 0, right = nums.length - 1;
75-
while (left < right) {
76-
int mid = (left + right) >>> 1;
77-
if ((mid & 1) == 1) {
78-
--mid;
79-
}
80-
if (nums[mid] == nums[mid + 1]) {
81-
left = mid + 2;
82-
} else {
83-
right = mid;
84-
}
85-
}
86-
return nums[left];
87-
}
88-
}
89-
```
90-
9157
```java
9258
class Solution {
9359
public int singleNonDuplicate(int[] nums) {
9460
int left = 0, right = nums.length - 1;
9561
while (left < right) {
9662
int mid = (left + right) >> 1;
97-
if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 != 0 && nums[mid] != nums[mid - 1])) {
63+
// if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 == 1 && nums[mid] != nums[mid - 1])) {
64+
if (nums[mid] != nums[mid ^ 1]) {
9865
right = mid;
9966
} else {
10067
left = mid + 1;
@@ -112,12 +79,11 @@ function singleNonDuplicate(nums: number[]): number {
11279
let left = 0,
11380
right = nums.length - 1;
11481
while (left < right) {
115-
let mid = (left + right) >> 1;
116-
if ((mid & 1) == 1) --mid;
117-
if (nums[mid] == nums[mid + 1]) {
118-
left = mid + 2;
119-
} else {
82+
const mid = (left + right) >> 1;
83+
if (nums[mid] != nums[mid ^ 1]) {
12084
right = mid;
85+
} else {
86+
left = mid + 1;
12187
}
12288
}
12389
return nums[left];
@@ -129,15 +95,13 @@ function singleNonDuplicate(nums: number[]): number {
12995
```cpp
13096
class Solution {
13197
public:
132-
int singleNonDuplicate(vector<int> &nums) {
98+
int singleNonDuplicate(vector<int>& nums) {
13399
int left = 0, right = nums.size() - 1;
134100
while (left < right)
135101
{
136102
int mid = left + right >> 1;
137-
if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 != 0 && nums[mid] != nums[mid - 1]))
138-
right = mid;
139-
else
140-
left = mid + 1;
103+
if (nums[mid] != nums[mid ^ 1]) right = mid;
104+
else left = mid + 1;
141105
}
142106
return nums[left];
143107
}
@@ -151,13 +115,10 @@ func singleNonDuplicate(nums []int) int {
151115
left, right := 0, len(nums)-1
152116
for left < right {
153117
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 {
118+
if nums[mid] != nums[mid^1] {
160119
right = mid
120+
} else {
121+
left = mid + 1
161122
}
162123
}
163124
return nums[left]

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

+16-53
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
## Solutions
3737

38+
Binary search.
39+
3840
<!-- tabs:start -->
3941

4042
### **Python3**
@@ -45,22 +47,8 @@ class Solution:
4547
left, right = 0, len(nums) - 1
4648
while left < right:
4749
mid = (left + right) >> 1
48-
if (mid & 1) == 1:
49-
mid -= 1
50-
if nums[mid] == nums[mid + 1]:
51-
left = mid + 2
52-
else:
53-
right = mid
54-
return nums[left]
55-
```
56-
57-
```python
58-
class Solution:
59-
def singleNonDuplicate(self, nums: List[int]) -> int:
60-
left, right = 0, len(nums) - 1
61-
while left < right:
62-
mid = (left + right) >> 1
63-
if (mid % 2 == 0 and nums[mid] != nums[mid + 1]) or (mid % 2 != 0 and nums[mid] != nums[mid - 1]):
50+
# Equals to: if (mid % 2 == 0 and nums[mid] != nums[mid + 1]) or (mid % 2 == 1 and nums[mid] != nums[mid - 1]):
51+
if nums[mid] != nums[mid ^ 1]:
6452
right = mid
6553
else:
6654
left = mid + 1
@@ -69,33 +57,14 @@ class Solution:
6957

7058
### **Java**
7159

72-
```java
73-
class Solution {
74-
public int singleNonDuplicate(int[] nums) {
75-
int left = 0, right = nums.length - 1;
76-
while (left < right) {
77-
int mid = (left + right) >>> 1;
78-
if ((mid & 1) == 1) {
79-
--mid;
80-
}
81-
if (nums[mid] == nums[mid + 1]) {
82-
left = mid + 2;
83-
} else {
84-
right = mid;
85-
}
86-
}
87-
return nums[left];
88-
}
89-
}
90-
```
91-
9260
```java
9361
class Solution {
9462
public int singleNonDuplicate(int[] nums) {
9563
int left = 0, right = nums.length - 1;
9664
while (left < right) {
9765
int mid = (left + right) >> 1;
98-
if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 != 0 && nums[mid] != nums[mid - 1])) {
66+
// if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 == 1 && nums[mid] != nums[mid - 1])) {
67+
if (nums[mid] != nums[mid ^ 1]) {
9968
right = mid;
10069
} else {
10170
left = mid + 1;
@@ -113,12 +82,11 @@ function singleNonDuplicate(nums: number[]): number {
11382
let left = 0,
11483
right = nums.length - 1;
11584
while (left < right) {
116-
let mid = (left + right) >> 1;
117-
if ((mid & 1) == 1) --mid;
118-
if (nums[mid] == nums[mid + 1]) {
119-
left = mid + 2;
120-
} else {
85+
const mid = (left + right) >> 1;
86+
if (nums[mid] != nums[mid ^ 1]) {
12187
right = mid;
88+
} else {
89+
left = mid + 1;
12290
}
12391
}
12492
return nums[left];
@@ -130,15 +98,13 @@ function singleNonDuplicate(nums: number[]): number {
13098
```cpp
13199
class Solution {
132100
public:
133-
int singleNonDuplicate(vector<int> &nums) {
101+
int singleNonDuplicate(vector<int>& nums) {
134102
int left = 0, right = nums.size() - 1;
135103
while (left < right)
136104
{
137105
int mid = left + right >> 1;
138-
if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 != 0 && nums[mid] != nums[mid - 1]))
139-
right = mid;
140-
else
141-
left = mid + 1;
106+
if (nums[mid] != nums[mid ^ 1]) right = mid;
107+
else left = mid + 1;
142108
}
143109
return nums[left];
144110
}
@@ -152,13 +118,10 @@ func singleNonDuplicate(nums []int) int {
152118
left, right := 0, len(nums)-1
153119
for left < right {
154120
mid := (left + right) >> 1
155-
if (mid & 1) == 1 {
156-
mid--
157-
}
158-
if nums[mid] == nums[mid+1] {
159-
left = mid + 2
160-
} else {
121+
if nums[mid] != nums[mid^1] {
161122
right = mid
123+
} else {
124+
left = mid + 1
162125
}
163126
}
164127
return nums[left]

Diff for: solution/0500-0599/0540.Single Element in a Sorted Array/Solution.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
class Solution {
22
public:
3-
int singleNonDuplicate(vector<int> &nums) {
3+
int singleNonDuplicate(vector<int>& nums) {
44
int left = 0, right = nums.size() - 1;
55
while (left < right)
66
{
77
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;
8+
if (nums[mid] != nums[mid ^ 1]) right = mid;
9+
else left = mid + 1;
1210
}
1311
return nums[left];
1412
}

Diff for: solution/0500-0599/0540.Single Element in a Sorted Array/Solution.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@ func singleNonDuplicate(nums []int) int {
22
left, right := 0, len(nums)-1
33
for left < right {
44
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 {
5+
if nums[mid] != nums[mid^1] {
116
right = mid
7+
} else {
8+
left = mid + 1
129
}
1310
}
1411
return nums[left]

Diff for: solution/0500-0599/0540.Single Element in a Sorted Array/Solution.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ class Solution {
22
public int singleNonDuplicate(int[] nums) {
33
int left = 0, right = nums.length - 1;
44
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 {
5+
int mid = (left + right) >> 1;
6+
// if ((mid % 2 == 0 && nums[mid] != nums[mid + 1]) || (mid % 2 == 1 && nums[mid] != nums[mid - 1])) {
7+
if (nums[mid] != nums[mid ^ 1]) {
128
right = mid;
9+
} else {
10+
left = mid + 1;
1311
}
1412
}
1513
return nums[left];

Diff for: solution/0500-0599/0540.Single Element in a Sorted Array/Solution.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ def singleNonDuplicate(self, nums: List[int]) -> int:
33
left, right = 0, len(nums) - 1
44
while left < right:
55
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:
6+
# Equals to: if (mid % 2 == 0 and nums[mid] != nums[mid + 1]) or (mid % 2 == 1 and nums[mid] != nums[mid - 1]):
7+
if nums[mid] != nums[mid ^ 1]:
118
right = mid
9+
else:
10+
left = mid + 1
1211
return nums[left]

Diff for: solution/0500-0599/0540.Single Element in a Sorted Array/Solution.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ function singleNonDuplicate(nums: number[]): number {
22
let left = 0,
33
right = nums.length - 1;
44
while (left < right) {
5-
let mid = (left + right) >> 1;
6-
if ((mid & 1) == 1) --mid;
7-
if (nums[mid] == nums[mid + 1]) {
8-
left = mid + 2;
9-
} else {
5+
const mid = (left + right) >> 1;
6+
if (nums[mid] != nums[mid ^ 1]) {
107
right = mid;
8+
} else {
9+
left = mid + 1;
1110
}
1211
}
1312
return nums[left];

0 commit comments

Comments
 (0)