给定一个只包含整数的有序数组 nums ,每个元素都会出现两次,唯有一个数只会出现一次,请找出这个唯一的数字。

    示例 1:

    输入: nums = [1,1,2,3,3,4,4,8,8]
    输出: 2
    示例 2:

    输入: nums = [3,3,7,7,10,11,11]
    输出: 10

    提示:

    1 <= nums.length <= 105
    0 <= nums[i] <= 105

    进阶: 采用的方案可以在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行吗?


    1. class Solution {
    2. public int singleNonDuplicate(int[] nums) {
    3. int t = 0;
    4. for (int num : nums) t ^= num;
    5. return t;
    6. }
    7. }

    二分

    1. class Solution {
    2. public int singleNonDuplicate(int[] nums) {
    3. int n = nums.length;
    4. int l = 0, r = n-1;
    5. while (l <= r) {
    6. int mid = l + r >> 1;
    7. if (mid > 0 && nums[mid] == nums[mid-1]) {
    8. if (mid % 2 == 0) r = mid - 2;
    9. else l = mid + 1;
    10. } else if (mid < n-1 && nums[mid] == nums[mid+1]) {
    11. if (mid % 2 == 0) l = mid + 2;
    12. else r = mid - 1;
    13. } else {
    14. return nums[mid];
    15. }
    16. }
    17. return -1;
    18. }
    19. }