1183. 排序数组中的单个元素

描述

给定一个排序数组,只包含整数,其中每个元素出现两次,除了一个出现一次的元素。 找到只出现一次的单个元素。

例1:

输入:[1,1,2,3,3,4,4,8,8]
输出:2

例2:

输入:[3,3,7,7,10,11,11]
输出:10

您的解决方案应在O(log n)时间和O(1)空间中运行。

class Solution {
public:
    /**
     * @param nums: a list of integers
     * @return: return a integer
     */
    int singleNonDuplicate(vector<int> &nums) {
        // write your code here
        return findn(0, nums.size()-1, nums);
    
    }
    int findn(int l, int r, vector<int> &nums) {
        if (l==r) return nums[l];
        int mid = (l+r) / 2;
        if (mid%2 == 0) {
            if (nums[mid]==nums[mid-1]) findn(l, mid-2, nums);
            else if (nums[mid]==nums[mid+1]) findn(mid+2, r, nums);
            else return mid;
        }
        else if (mid%2 == 1) {
            if (nums[mid]==nums[mid-1]) findn(mid+1, r, nums);
            else if (nums[mid]==nums[mid+1]) findn(l, mid-1, nums);
            else return mid;
        }
    }
};
posted @ 2018-10-17 13:22  narjaja  阅读(166)  评论(0编辑  收藏  举报