Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

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

Lines changed: 14 additions & 53 deletions
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]

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

Lines changed: 16 additions & 53 deletions
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]

‎solution/0500-0599/0540.Single Element in a Sorted Array/Solution.cpp‎

Lines changed: 3 additions & 5 deletions
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
}

‎solution/0500-0599/0540.Single Element in a Sorted Array/Solution.go‎

Lines changed: 3 additions & 6 deletions
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]

‎solution/0500-0599/0540.Single Element in a Sorted Array/Solution.java‎

Lines changed: 5 additions & 7 deletions
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];

‎solution/0500-0599/0540.Single Element in a Sorted Array/Solution.py‎

Lines changed: 4 additions & 5 deletions
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]

‎solution/0500-0599/0540.Single Element in a Sorted Array/Solution.ts‎

Lines changed: 4 additions & 5 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /