給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。
注意:您的方案應該在 o(log n)時間複雜度和 o(1)空間複雜度中執行。
示例 1:輸入:[1,1,2,3,3,4,4,8,8]
輸出:2
示例 2:因為方案應該在 o(log n)時間複雜度(遍歷一整個陣列為o(n)),所以需要使用查詢演算法優化,二分搜尋最為契合。輸入:[3,3,7,7,10,11,11]
輸出:10
但是當mid指標指向非單一元素時,刪除(跳過)這一對元素,避免產生新的單一元素。剩下兩個子區間中長度為奇數的包含單一元素。
在移動左右指標時,需要考慮五種情況
右邊的子區間長度為奇數
左邊的子區間長度為奇數
右邊的子區間長度為奇數
左邊的子區間長度為奇數
class
solution
:def
singlenonduplicate
(self, nums: list[
int])-
>
int:
left =
0 right =
len(nums)-1
while leftmid =
(left+right)//2
if(mid ==
0or nums[mid]
!= nums[mid-1]
)and nums[mid]
!= nums[mid+1]
:return nums[mid]
elif nums[mid]
== nums[mid+1]
:if(mid-left)%2
==0: left = mid +
2else
: right = mid-
1else:if
(mid-left+1)
%2==0
: left = mid+
1else
: right = mid -
2return nums[left]
540 有序陣列中的單一元素
給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。示例 1 輸入 1,1,2,3,3,4,4,8,8 輸出 2示例 2 輸入 3,3,7,7,10,11,11 輸出 10注意 您的方案應該在 o log n 時間複雜度和 o 1 空間複雜度中執行。解題思路 1....
540 有序陣列中的單一元素
給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。示例 1 示例 2 注意 您的方案應該在 o log n 時間複雜度和 o 1 空間複雜度中執行。1.令 index 為 single element 在陣列中的位置。在 index 之後,陣列中原來存在的成對狀...
540 有序陣列中的單一元素
假設只出現一次的元素位於下標 x,由於其餘每個元素都出現兩次,因此下標 xx 的左邊和右邊都有偶數個元素,陣列的長度是奇數。由於陣列是有序的,因此陣列中相同的元素一定相鄰。對於下標 x左邊的下標 y,如果 nums y nums y 1 nums y nums y 1 則 y一定是偶數 對於下標 x...