LeetCode 540. Single Element in a Sorted Array(有序数组中的单一元素)

  1. 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。
  2. O(log n)时间复杂度和 O(1)空间复杂度
    若时间复杂度为O(logn),则不能遍历整个数组,otherwise为O(n)
  3. 若用位运算-异或,时间复杂度为O(n)
  1. 数组中元素总个数为奇数个
  2. single element 元素肯定位于偶数index处
  public int singleNonDuplicate(int[] nums) {
        int left = 0, right = nums.length - 1;
        //当搜索区间只剩一个元素时,此单一元素即为single element
        while(left < right) {
            int mid = left + (right - left) / 2;
            //使得mid为偶数
            if(mid % 2 == 1) mid --;

            //single element 位于mid右侧+2位置以后
            if(nums[mid] == nums[mid + 1]) {
                left = mid + 2;
            }
            //single element 位于mid处,或者mid左侧
            else {
                right = mid;
            }
        }
        return nums[left];
    }
发布了581 篇原创文章 · 获赞 97 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/gx17864373822/article/details/104885550