每日一题 2019 - 02 - 26
题目:
Given a sorted array consisting of only integers where every element appears twice except for one element which appears once. Find this single element that appears only once.
Example 1:
1 | Input: [1,1,2,3,3,4,4,8,8] |
Example 2:
1 | Input: [3,3,7,7,10,11,11] |
Note: Your solution should run in O(log n) time and O(1) space.
解法:
这个让我们使用O(logn)
的时间复杂度找出给定数组中的不成对的元素,从时间复杂度上可以选择使用二分查找
的方法来完成任务。
具体的查找可以以二分查找为主线,在查找时候我们在找到中间元素之后,我们可能需要进行分类,设中间元素为mid
,那么
- 如果
arr[mid] != arr[mid-1]
,那就证明中位值跟中位值前面一位数字不是一对,所以就要把mid
往前推一位,保证二分查找时候不会出错 - 根据
mid
进行划分之后,我们会发现mid
前后两部分奇偶性不同,那么很明显要找的数据就在处于奇数长度的序列中,接着就剪短二分查找的长度,继续查找。
代码:
1 | class Solution { |