1)题目:
力扣540. 有序数组中的单一元素https://leetcode-cn.com/problems/single-element-in-a-sorted-array/
2)代码:
class Solution{
public int singleNonDuplicate(int[] nums) {
//除了目标数外,其他数成对存在。且数组的长度一定为奇数。
for (int i = 0; i < nums.length-1; i=i+2) {
if (nums[i]!=nums[i+1])
return nums[i];
}
//没找到则为最后一个。
return nums[nums.length-1];
}
}
class Solution {
public int singleNonDuplicate(int[] nums) {
int left=0;
int right =nums.length-1;
while (left<right){
int mid =(left+right)>>1;
if (mid%2==0){
//mid为偶数,且和右边数相等,则目标数位于右边,不等则位于左边(或就为目标数)。
//由于索引从0开始,mid为偶数,其实是第奇数个数,应该与后一个数(右边)匹配
//比如0和1,2和3。
if (nums[mid]==nums[mid+1])
left=mid+1;
else
right=mid;
}else{
//mid为奇数,且和左边数相等,则目标数位于右边,不等则位于左边(或就为目标数)。
if (nums[mid]==nums[mid-1])
left=mid+1;
else
right=mid;
}
}
return nums[left];
}
}
3)运行结果: