540. Single Element in a Sorted Array

来源:互联网 发布:软件期刊 编辑:程序博客网 时间:2024/06/05 16:40
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 inO(log n) time and O(1) space.
思想:用的二分法 注意索引的左右判断,二分的奇偶判断
AC代码:时间o(logn) 空间o(1)
class Solution {public:    int singleNonDuplicate(vector<int>& nums) {            int r=0;            int l=nums.size()-1;            while(r<l){                int mid = (r+l)/2;                if(mid%2==0){                    if(nums[mid]==nums[mid+1]) r = mid+2;                    else if(nums[mid]==nums[mid-1]) l = mid -2;                    else return nums[mid];                }else{                    if(nums[mid]==nums[mid+1]) l=mid-1;                    else if(nums[mid]==nums[mid-1]) r=mid+1;                    else return nums[mid];                }            }            return nums[r];    }};


原创粉丝点击