LeetCode 540 有序陣列中的單一元素

2021-10-01 23:56:06 字數 948 閱讀 1750

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

示例 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)空間複雜度中執行。

這道題非常有意思。限制了時間複雜度,所以不能用遍歷或者異或的方法(異或陣列中所有元素,剩下的那個就是只出現一次的,因為其他的都被抵消了–劍指offer原題)。

o(log n)的話就想象二分吧。主要是二分的條件不好找,隱藏較深。

通過分析我們發現,我們要尋找的target元素出現的下標總是偶數。比如例項1和2中的下標分別是2和4。而如果我們找到mid後,只關注偶數下標的mid即可,因為target不可能是奇數下標。

然後,如果mid下標是偶數,而又與mid+1處的元素相等,說明l到mid+1這個區間中,元素沒有被target打亂!也就是說target沒有出現在這個區間中,應該去【mid+2,h】中找。

反之,如果不相等,那說明l到mid+1這個區間中,元素被target打亂了,應該去【l,mid】中找。

直到退出迴圈,那麼l與h相差1,則找到了nums【mid】!=nums【mid+1】,此時的nums【l】就是nums【mid】。

class

solution

if(nums[mid]

==nums[mid+1]

)else

}//當l與h差1的時候退出迴圈,則此時nums[mid]!=nums[mid+1],l就是mid,返回即可.

return nums[l];}

}

Leetcode540 查詢有序陣列中的單一元素

給定乙個只包含整數的有序陣列,每個元素都會出現兩次,唯有乙個數隻會出現一次,找出這個數。示例 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 空間複雜度中執行。解題思路 ...

leetCode 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 空間複雜度中執行。由於只有乙...

leetcode540 有序陣列中的單一元素

題目中很明確的說了,需要o logn 的演算法,這簡直就是二分的代名詞。二分的本質是需要去找乙個性質,一半滿足另一半不滿足。這個性質就是,相等的兩個元素中的第乙個的下表一定是偶數。當你搜尋到某個下標時,如果它是偶數,那就看它 它的下乙個元素 如果它是奇數,那就它 它的前乙個元素。又根據異或的性質,偶...