给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
示例 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 { int ans; void solve(int[] nums,int low,int heigh){ if(low<=heigh){ int mid=(low+heigh)/2; if((mid>0&&nums[mid-1]==nums[mid])||(mid+1<nums.length&&nums[mid+1]==nums[mid])){ solve(nums,low,mid-1); solve(nums,mid+1,heigh); }else ans=nums[mid]; } } public int singleNonDuplicate(int[] nums) { solve(nums,0,nums.length-1); return ans; } }