題目: LeetCode - 540. Single Element in a Sorted Array
題目說明
給一個排序好的陣列,裡面只有一個值是單一存在的,其餘都兩兩成對,求單一存在的值為何?
※ 題目希望時間複雜度為 O(log n)
解題思路
觀察規則,使用二元搜尋法即可。
參考解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Solution { public: int singleNonDuplicate(vector<int>& nums) { int begin = 0, end = nums.size(), mid; while(end - begin != 1) { mid = (begin + end) / 2; if(nums[mid - 1] != nums[mid] && nums[mid] != nums[mid + 1]) return nums[mid]; if(nums[mid - 1] != nums[mid] && nums[mid] == nums[mid + 1]) if(mid % 2) end = mid; else begin = mid + 2; else if(nums[mid - 1] == nums[mid] && nums[mid] != nums[mid + 1]) if(mid % 2) begin = mid + 1; else end = mid - 1; } return nums[begin]; } };
|