这里写自定义目录标题
欢迎使用Markdown编辑器
二分法
头条面试题
Q: 形如这样的无序数组 [1,1,2,2,3,4,4,6,6,5,5,8,8] ,除了一个数字只会出现一次,其他数字成对出现而且相邻排列,找出只出现一次的这个数字。
[1,1,2,2,3]
public class Main {
public static void main(String[] args) {
int []arr={
1,1,2,2,3,3,5,4,4,6,6,5,5,8,8};
int result=binarySearch(arr);
System.out.println(result);
}
public static int binarySearch(int[]arr)
{
int low=0;
int high=arr.length-1;
//闭区间
while(low<=high)
{
if(low==high)
return arr[low];
int mid=low+(high-low)/2;
//中间这个数就是单独出现的
if(arr[mid]!=arr[mid-1] && arr[mid]!=arr[mid+1])
{
return arr[mid];
}
//中间的数,相同的数出现在右边
else if(arr[mid]==arr[mid+1])
{
int right_length=(arr.length-1)-(mid+1);
if(right_length%2==0)