540 有序陣列中的單一元素

2021-10-23 17:59:07 字數 1334 閱讀 9812

給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。

注意:您的方案應該在 o(log n)時間複雜度和 o(1)空間複雜度中執行。

示例 1:

輸入:[1,1,2,3,3,4,4,8,8]

輸出:2

示例 2:

輸入:[3,3,7,7,10,11,11]

輸出:10

因為方案應該在 o(log n)時間複雜度(遍歷一整個陣列為o(n)),所以需要使用查詢演算法優化,二分搜尋最為契合。

但是當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...