Skip to content

Commit cd626d5

Browse files
committed
solve problem Single Element In A Sorted Array
1 parent 6dab866 commit cd626d5

File tree

5 files changed

+71
-0
lines changed

5 files changed

+71
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ All solutions will be accepted!
244244
|442|[Find All Duplicates In An Array](https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/description/)|[java/py/js](./algorithms/FindAllDuplicatesInAnArray)|Medium|
245245
|64|[Minimum Path Sum](https://leetcode-cn.com/problems/minimum-path-sum/description/)|[java/py/js](./algorithms/MinimumPathSum)|Medium|
246246
|535|[Encode And Decode Tinyurl](https://leetcode-cn.com/problems/encode-and-decode-tinyurl/description/)|[java/py/js](./algorithms/EncodeAndDecodeTinyurl)|Medium|
247+
|540|[Single Element In A Sorted Array](https://leetcode-cn.com/problems/single-element-in-a-sorted-array/description/)|[java/py/js](./algorithms/SingleElementInASortedArray)|Medium|
247248

248249
# Database
249250
|#|Title|Solution|Difficulty|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Single Element In A Sorted Array
2+
We can solve this problem by Binary Search
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public int singleNonDuplicate(int[] nums) {
3+
int left = 0,
4+
right = nums.length - 1;
5+
6+
while (left < right) {
7+
int mid = (left + right) / 2;
8+
9+
if (nums[mid] == nums[mid + 1]) {
10+
if (mid % 2 == 0) left = mid + 1;
11+
else right = mid - 1;
12+
} else if (nums[mid] == nums[mid - 1]) {
13+
if (mid % 2 == 0) right = mid - 1;
14+
else left = mid + 1;
15+
} else {
16+
return nums[mid];
17+
}
18+
}
19+
20+
return nums[left];
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var singleNonDuplicate = function(nums) {
6+
let left = 0,
7+
right = nums.length - 1
8+
9+
while (left < right) {
10+
let mid = parseInt((left + right) / 2)
11+
12+
if (nums[mid] === nums[mid + 1]) {
13+
if (mid % 2 === 0) left = mid + 1
14+
else right = mid - 1
15+
} else if (nums[mid] === nums[mid - 1]) {
16+
if (mid % 2 === 0) right = mid - 1
17+
else left = mid + 1
18+
} else {
19+
return nums[mid]
20+
}
21+
}
22+
23+
return nums[left]
24+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution(object):
2+
def singleNonDuplicate(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: int
6+
"""
7+
left = 0
8+
right = len(nums) - 1
9+
10+
while left < right:
11+
mid = (left + right) / 2
12+
13+
if nums[mid] == nums[mid - 1]:
14+
if mid % 2 == 0: right = mid - 1
15+
else: left = mid + 1
16+
elif nums[mid] == nums[mid + 1]:
17+
if mid % 2 == 0: left = mid + 1
18+
else: right = mid - 1
19+
else:
20+
return nums[mid]
21+
22+
return nums[left]

0 commit comments

Comments
 (0)