题解 | #有序数组中出现一次的元素#
有序数组中出现一次的元素
https://www.nowcoder.com/practice/4c67fc80c37649ac906fee76ec82beb4
class Solution { public: int singleElement(vector<int>& v) { int l = 0, r = v.size() - 1; // 定义左右指针,分别指向数组的首尾位置 while (l < r) { // 使用循环进行二分查找 int mid = l + (r - l) / 2; // 计算中间位置 if (mid % 2 == 0) { // 如果mid为偶数 if (v[mid] == v[mid + 1]) { // 判断mid与其后一个元素是否相等 l = mid + 2; // 如果相等,说明只出现一次的数在mid的右侧,更新左指针 } else { r = mid; // 如果不相等,只出现一次的数在mid或mid之前位置,更新右指针 } } else { // 如果mid为奇数 if (v[mid] == v[mid - 1]) { // 判断mid与其前一个元素是否相等 l = mid + 1; // 如果相等,说明只出现一次的数在mid的右侧,更新左指针 } else { r = mid - 1; // 如果不相等,只出现一次的数在mid或mid之前位置,更新右指针 } } } return v[l]; // 返回唯一出现一次的数 } };