- leet:地址
- 类型:二分查找
- 题目描述:
- 给定一个有序数组,该数字中除了有一个是单一元素外,其余元素都出现两次,查找只出现一次的元素。
- 输入输出样例:
- Input: [1,1,2,3,3,4,4,8,8]
Output: 2
- c++实现
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
Solution(vector<int> a):arr(a) {};
vector<int> arr;
public:
int findSingle() {
int l = 0, h = arr.size() - 1;
while (l < h)
{
int mid = (l + h) / 2;
if (mid % 2 == 0)
{
if (arr.at(mid) == arr.at(mid + 1))
l = mid + 1;
else
h = mid;
}
else
{
if (arr.at(mid) == arr.at(mid - 1))
l = mid + 1;
else
h = mid;
}
}
return arr.at(l);
}
};
int main(int argc, char* argv[])
{
vector<int> arr = { 3,3,7,7,10,11,11 };
Solution *p = new Solution(arr);
int res = p->findSingle();
cout << res << endl;
system("pause");
return 0;
}