题目要求时间复杂度为O(logn),很容易也必须使用二分
class Solution {
public int singleNonDuplicate(int[] nums) {
int low=0,high=nums.length-1;
while(low<high) {
int mid=low+(high-low)/2;
if(nums[mid-1]==nums[mid]) {
if((high-mid)%2==0) {
high=mid-2;
}else {
low=mid+1;
}
}else if(nums[mid]==nums[mid+1]) {
if((mid-low)%2==0) {
low=mid+2;
}else {
high=mid-1;
}
}else {
return nums[mid];
}
}
return nums[low];
}
}
有O(n)的方法,其实是最好想的
class Solution {
public int singleNonDuplicate(int[] nums) {
for(int i=0;i<nums.length-1;i+=2) {
if(nums[i]!=nums[i+1]) {
return nums[i];
}
}
return nums[nums.length-1];
}
}