有序数组中的单身数字

有序数组中的单身数字

问题

这个题目说的是,给你一个排好序的整数数组,里面的数字都出现两次,只有一个数字出现了一次,我们管它叫单身数字,你要写代码找到这个单身数字。

比如说给你的有序数组是:

1, 1, 2, 2, 4, 4, 6, 8, 8

这个数组里 6 只出现了一次,因此你要返回的数字就是 6。

代码

public class AlgoCasts {

  // Time: O(n), Space: O(1)
  public int singleNumInSortedArrayWithXOR(int[] nums) {
    int result = 0;
    for (int num: nums) result ^= num;
    return result;
  }

  // Time: O(log(n)), Space: O(1)
  public int singleNumInSortedArrayBinarySearch(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 < nums.length && nums[mid+1] == nums[mid]) {
      } else {
        return nums[mid];
      }
      if ((mid-low) % 2 == 1) high = mid - 1;
      else low = mid + 2;
    }
    return -1;
  }

}

 上一篇
区间合并 区间合并
区间合并问题 这个题目说的是,给你一个区间集合,你要把有重叠的区间合并起来。 比如说,给你的区间集合是: [1, 8] [2, 4] [9, 10] [10, 16] 这 4 个区间里,[1, 8] 区间包含了 [2, 4] 区间,于是
2018-12-09
下一篇 
数组中第 K 大的元素 数组中第 K 大的元素
数组中第 K 大的元素问题 这个题目说的是,给你一个整数数组和一个整数 K,你要找到数组中第 K 大的元素。 比如说,给你的整数数组是: 4, 2, 8, 1, 8 整数 K 是 2。这个数组中第 2 大的元素是 8,因此你要返回 8。
2018-12-09
  目录