题解 | #有序数组中出现一次的元素#

有序数组中出现一次的元素

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]; // 返回唯一出现一次的数
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务