題目中很明確的說了,需要o(logn)的演算法,這簡直就是二分的代名詞。
二分的本質是需要去找乙個性質,一半滿足另一半不滿足。
這個性質就是,相等的兩個元素中的第乙個的下表一定是偶數。
當你搜尋到某個下標時,如果它是偶數,那就看它=它的下乙個元素;如果它是奇數,那就它=它的前乙個元素。
又根據異或的性質,偶數和1異或=該數+1,奇數和1異或等於該數-1。
即該陣列的左端滿足nums[mid]nums[mid1],右端不滿足,且要找的那個元素就是第乙個滿足nums[mid]!=nums[mid1]的。
本題中,性質記作「nums[mid]nums[mid^1]」,要找第乙個滿足該條件的。
如果該條件得到滿足,說明mid在後半段,右指標應該收縮到mid的位置,即使用二分法模板1。可得**如下:
剛剛既然說到了異或,那麼其實異或還有乙個很有意思的性質:public int singlenonduplicate(int nums)
return nums[r];
}
aa=0,0a=a
則有乙個o(n)的演算法:
public int singlenonduplicate(int nums)
just a joke!2022情人節快樂! 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 空間複雜度中執行。這道題非常...
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 空間複雜度中執行。由於只有乙...