Fetch the repository succeeded.
package arrays;
/**题目:有序数组中的单身数字
*
* @Author Gavin
* @date 2022.01.03 10:54
*/
public class array_11 {
/**
* 第一种方法 :循环所有的元素进行异或操作,略
* Time:O(n)
*/
/**
* 第二种方法:利用有序这个特点使用二分搜索法
*/
//Time:O(log(n)) Space:O(1)
public static int solution(int[] nums){
int low=0,high=nums.length-1;
while (low<=high){
int mid=low+(high-low)/2;
if(mid-1>=0&&nums[mid-1]==nums[mid]){
--mid;
}else if(mid+1<=high&&nums[mid+1]==nums[mid]){}
else{
return nums[mid];
}
/**
* 这里就是核心点:
* 因为单身数字都不是成对出现的,所以有一边是为奇数
*/
if((mid-low)%2==1)high=mid-1;
else low=mid+2;
}
return -1;
}
public static void main(String[] args) {
int[] array=new int[]{2,2,3,3,4};
System.out.println(solution(array));
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。