题目的链接在这里:https://leetcode-cn.com/problems/single-element-in-a-sorted-array/
题目大意
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。一、示意图
二、解题思路
java实现
代码如下:
class Solution {
public int singleNonDuplicate(int[] nums){
//既然这道题是二分查找范围的 那就这个思路
int l=0;
int r=nums.length-1;
while (l<r){
int mid=l+(r-l)/2;
//直接看中间这个值
//先进行特殊值判定
if((mid-1)>=0&&(mid+1)<=r&&nums[mid]!=nums[mid-1]&&nums[mid]!=nums[mid+1]){
return nums[mid];
}
//首先确保左右两边都是双数
if(mid%2!=0){
mid--;
}
//然后在两边都是双数的情况之下,判断这个mid是在那一边的
if(nums[mid]==nums[mid+1]){
//如果他和他的右边是一样的话 按照这个逻辑 ,本来两边都是双数的 他如果和右边一样的话
//说明右边原本的双数是不成立的 说明那个值在右边
//并且要右移两位
l=mid+2;
}
else{
//说明是在左边
r=mid-1;
}
}
return nums[l];
}
}