超时的快慢指针,可是超时了。。呜呜呜
int singleNonDuplicate(int* nums, int numsSize){
//快慢指针,如果前一位与当前一位相等,那把fast赋值给slow,进行前移
int slow=0,fast=1;
int ans=0;
int len=numsSize;
if(len==1)
{
return nums[0];
}
while(slow<len)
{
if(nums[slow]==nums[fast])
{
slow=fast;
}
else
{
ans=nums[slow];
break;
}
slow++;
fast+=2;//每次走两步,因为题目说每个元素都会出现二次
//找出只出现1次的,可以通过fast在偶数位与fast在奇数位进行比较
}
return ans;
}
int singleNonDuplicate(int* nums, int numsSize){
for(int i=0;i<numsSize-1;i+=2)
{
if(nums[i]!=nums[i+1])
return nums[i];
}
return nums[numsSize-1];
}
int singleNonDuplicate(int* nums, int numsSize){
int left=0;
int right=numsSize;
while(left<right)
{
int mid=left+(right-left)/2;
if(mid%2==0)//mid为偶数时,第二位在右边
{
if(mid+1<numsSize&&nums[mid]==nums[mid+1])
{
left=mid+1;
}
else{
right=mid;
}
}
else{//为奇数时,第一位在左边
if(mid-1>=0&&nums[mid-1]==nums[mid])
{
left=mid+1;
}
else{
right=mid;
}
}
}
return nums[right];
}