mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-06 09:23:19 +08:00
add: leetcode 540 readme
This commit is contained in:
64
leetcode/0540.Single-Element-in-a-Sorted-Array/README.md
Normal file
64
leetcode/0540.Single-Element-in-a-Sorted-Array/README.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# [540. Single Element in a Sorted Array](https://leetcode-cn.com/problems/single-element-in-a-sorted-array/)
|
||||||
|
|
||||||
|
## 题目
|
||||||
|
|
||||||
|
You are given a sorted array consisting of only integers where every element appears exactly twice, except for one element which appears exactly once.
|
||||||
|
|
||||||
|
Return the single element that appears only once.
|
||||||
|
|
||||||
|
Your solution must run in O(log n) time and O(1) space.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
Input: nums = [1,1,2,3,3,4,4,8,8]
|
||||||
|
Output: 2
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
Input: nums = [3,3,7,7,10,11,11]
|
||||||
|
Output: 10
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
- 1 <= nums.length <= 100000
|
||||||
|
- 0 <= nums[i] <= 100000
|
||||||
|
|
||||||
|
## 题目大意
|
||||||
|
|
||||||
|
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
|
||||||
|
|
||||||
|
请你找出并返回只出现一次的那个数。
|
||||||
|
|
||||||
|
你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。
|
||||||
|
|
||||||
|
## 解题思路
|
||||||
|
|
||||||
|
假设下标idx是单独的数字,idx左边的偶数下标x有nums[x] == nums[x + 1],
|
||||||
|
idx右边的奇数下标y有nums[y] == nums[y + 1],可以根据此特性用二分查找idx对应的值
|
||||||
|
|
||||||
|
## 代码
|
||||||
|
|
||||||
|
```go
|
||||||
|
package leetcode
|
||||||
|
|
||||||
|
func singleNonDuplicate(nums []int) int {
|
||||||
|
left, right := 0, len(nums)-1
|
||||||
|
for left < right {
|
||||||
|
mid := (left + right) / 2
|
||||||
|
if mid%2 == 0 {
|
||||||
|
if nums[mid] == nums[mid+1] {
|
||||||
|
left = mid + 1
|
||||||
|
} else {
|
||||||
|
right = mid
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if nums[mid] == nums[mid-1] {
|
||||||
|
left = mid + 1
|
||||||
|
} else {
|
||||||
|
right = mid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nums[left]
|
||||||
|
}
|
||||||
|
```
|
Reference in New Issue
Block a user