题目描述
题目思路
单一数数组有一条隐含的性质,那就是其元素个数一定为奇数个,结合这一性质根据题目要求时间复杂度为O(lgN),想到用二分查找。当范围缩小到三个数时,可以利用三个数的异或求得单一数。
代码
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int start=0,end=nums.size()-1;
while(end-start!=2)
{
int mid=(end+start)/2;
if(mid-1>=0&&nums[mid]==nums[mid-1])
{
if(mid%2==0)end=mid;
else start=mid+1;
}
else if(mid+1<nums.size()&&nums[mid]==nums[mid+1])
{
if(mid%2==0)start=mid;
else end=mid-1;
}
else return nums[mid];
}
return nums[start]^nums[start+1]^nums[end];
}
};