@@ -42,22 +42,8 @@ class Solution:
42
42
left, right = 0 , len (nums) - 1
43
43
while left < right:
44
44
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 ]:
61
47
right = mid
62
48
else :
63
49
left = mid + 1
@@ -68,33 +54,14 @@ class Solution:
68
54
69
55
<!-- 这里可写当前语言的特殊实现逻辑 -->
70
56
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
-
91
57
``` java
92
58
class Solution {
93
59
public int singleNonDuplicate (int [] nums ) {
94
60
int left = 0 , right = nums. length - 1 ;
95
61
while (left < right) {
96
62
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 ]) {
98
65
right = mid;
99
66
} else {
100
67
left = mid + 1 ;
@@ -112,12 +79,11 @@ function singleNonDuplicate(nums: number[]): number {
112
79
let left = 0 ,
113
80
right = nums .length - 1 ;
114
81
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 ]) {
120
84
right = mid ;
85
+ } else {
86
+ left = mid + 1 ;
121
87
}
122
88
}
123
89
return nums [left ];
@@ -129,15 +95,13 @@ function singleNonDuplicate(nums: number[]): number {
129
95
``` cpp
130
96
class Solution {
131
97
public:
132
- int singleNonDuplicate(vector<int > & nums) {
98
+ int singleNonDuplicate(vector<int >& nums) {
133
99
int left = 0, right = nums.size() - 1;
134
100
while (left < right)
135
101
{
136
102
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;
141
105
}
142
106
return nums[ left] ;
143
107
}
@@ -151,13 +115,10 @@ func singleNonDuplicate(nums []int) int {
151
115
left, right := 0, len(nums)-1
152
116
for left < right {
153
117
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] {
160
119
right = mid
120
+ } else {
121
+ left = mid + 1
161
122
}
162
123
}
163
124
return nums[left]
0 commit comments