mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-06 01:15:57 +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