540. Single Element in a Sorted Array

Given a sorted array consisting of only integers where every element appears twice except for one element which appears once. Find this single element that appears only once.

Example 1:

Input: [1,1,2,3,3,4,4,8,8]
Output: 2

 

Example 2:

Input: [3,3,7,7,10,11,11]
Output: 10

 

Note: Your solution should run in O(log n) time and O(1) space.

一个有序数组只有一个数不出现两次,找出这个数。要求以 O(logN) 时间复杂度进行求解。

C++:

 1 class Solution {
 2 public:
 3     int singleNonDuplicate(vector<int>& nums) {
 4         int left = 0 ;
 5         int right = nums.size() - 1 ;
 6         while(left < right){
 7             int mid = left + (right - left) / 2 ;
 8             if (mid%2 == 1){
 9                 mid-- ;
10             }
11             if (nums[mid] == nums[mid+1]){
12                 left = mid + 2 ;
13             }else{
14                 right = mid ;
15             }
16         }
17         return nums[left] ;
18     }
19 };
原文地址:https://www.cnblogs.com/mengchunchen/p/10333520.html