题目描述 题目链接 代码 public int singleNonDuplicate(int[] nums) { int left = 0; int right = nums.length - 1; while (left <= right) { int mid = (left + right) >> 1; int midVal = nums[mid]; //mid是奇数时 //midVal==nums[mid-1]--->单数在左边 //midVal==nums[mid+1]--->单数在右边 if ((mid + 1) % 2 != 0) { if (mid - 1 >= 0 && midVal == nums[mid - 1]) { right = mid - 1; } else if (mid + 1 <= right && midVal == nums[mid + 1]) { left = mid + 1; } else { return midVal; } } else { if (mid - 1 >= 0 && midVal == nums[mid - 1]) { left = mid + 1; } else if (mid + 1 <= right && midVal == nums[mid + 1]) { right = mid - 1; } else { return midVal; } } } return 0; } 运行结果