540 有序陣列中的單一元素(二分查詢)

2021-10-10 18:40:42 字數 1360 閱讀 1110

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

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

這個題可以用二分法來做。值得注意的是要考慮四種情況,且題目有時間複雜度和空間複雜度的要求。

情況1:中間元素的同一元素在右邊,且目標元素在右邊

情況2:中間元素的同一元素在右邊,且目標元素在左邊

情況3:中間元素的同一元素在左邊,且目標元素在左邊

情況4:中間元素的同一元素在左邊,且目標元素在右邊

注意的點:①進行判斷目標元素的在左邊還是右邊的核心思想是,除去了mid的相同元素,陣列個數是偶數,則沒有目標元素,反之,有目標元素

②本來按常人思維,mid同一元素在右邊就去判斷右邊的陣列,在左邊就去判斷左邊的陣列,但是因為題目的時間複雜度要求,我們 統一判斷右邊的陣列個數。用(right - mid) % 2 == 0

③本來判斷是否存在目標元素是根據「除去了mid的相同元素,再看右邊陣列個數」,但是具體不好實現,所以分兩種情況。

1)、中間元素的同一元素在右邊:此時(right - mid) % 2 == 0,證明目標元素存在右邊

2)、中間元素的同一元素在左邊:此時(right - mid) % 2 != 0,證明目標元素在右邊

④注意mid和flag的定義都要放到while迴圈裡面,不然會超時

class

solution

else

}else

if(nums[mid]

== nums[mid -1]

)else

}else

}return nums[left]

;//這是為了防止陣列只有乙個元素,那麼就直接返回該元素,nums[0]

}}

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 有序陣列中的單一元素

給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。注意 您的方案應該在 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 因為方案應...