540 有序数组中的单一元素-中等
题目:
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足 O(log n)
时间复杂度和 O(1)
空间复杂度。
分析:
// date 2023/12/05
func singleNonDuplicate(nums []int) int {
n := len(nums)
// find the first index x that nums[x] != nums[x^1]
left, right := 0, n-1
for left < right {
mid := (right - left) / 2 + left
// 只要和相邻的元素相等,那么 x 一定在右边
// left = mid + 1
if nums[mid] == nums[mid^1] {
left = mid+1
} else {
right = mid
}
}
return nums[left]
}
最后更新于