540. Single Element in a Sorted Array
給你一個已排序整數陣列,裡面的所有數字都有恰好兩個,只有一個數字只有一個,
找出這個數字是什麼,限制時間複雜度:O(logn)且空間複雜度:O(1)。
Example :
Input: nums = [1,1,2,3,3,4,4,8,8]
Output: 2
Input: nums = [3,3,7,7,10,11,11]
Output: 10
思路:
1.看到題目說"陣列已排序"和"時間複雜度O(logn)"就可以確定這題要用二元搜尋來
做了,問題是我們要怎麼樣才能每次查找都捨棄掉一半不必去查的資料。
2.首先做個邊界處理,n == 1 的時候直接返回。
3.把mid作為切點,檢查當前mid這個索引數字的左右兩邊,如果有重複數字就返回兩
個重複數字的索引,否則直接返回nums[mid]。
4.要判斷要往左邊找還是右邊找的條件是:判斷某一半邊的元素數量是否是偶數
舉例來說,若index=[3,4]
1 1 2 3 3 4 4
因為所有數字恰好兩個且只有一個數字只有一個,所以一定有一邊有奇數個元素
所以去除當前重複元素之後的半邊如果有奇數個元素就往那邊找,另一邊捨棄。
5.最後返回nums[l]即可
JavaCode: