540.有序数组中的单一元素
题目:给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
示例 1: 输入:
[1,1,2,3,3,4,4,8,8] 输出: 2
示例 2: 输入:
[3,3,7,7,10,11,11] 输出: 10
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int l = 0;
int r = nums.size()-1;
while(l < r)
{
const int m =(r + l) / 2;
//const int n = m ^ 1;//异或操作
//如果m是偶数的话,在m前的所有数字都配对的情况下,m和m+1是配对的
int n = m % 2 == 0 ? m+1 : m-1;
if(nums[m] == nums[n])
{
//两数相等,则说明单独的数字在右半部分
l = m + 1;
}
else
{
//两数不相等,则说明单独的数字在右半部分
r = m;
}
}
return nums[l];
}
};
时间复杂度O(logn),空间复杂度O(1)