Leetcode 540. Один элемент в отсортированном массиве
Вопрос
Дан отсортированный массив, состоящий только из целых чисел, в котором каждый элемент встречается дважды, кроме одного элемента, который встречается один раз. Найдите этот единственный элемент, который появляется только один раз.
Пример 1:
Input: [1,1,2,3,3,4,4,8,8] Output: 2
Пример 2:
Input: [3,3,7,7,10,11,11] Output: 10
Решение
Ввод дает отсортированный массив, поэтому одно число появится в первый раз nums[i] != num[i+1]
Время выполнения: 52 мс
# @param {Integer[]} nums # @return {Integer} def single_non_duplicate(nums) i = 0 while i < nums.count return nums[i] if nums[i] != nums[i+1] i += 2 end end
И самый быстрый вариант, используйте bsearch
:
Время выполнения:46 мс
# @param {Integer[]} nums # @return {Integer} def single_non_duplicate(nums) nums[(0..nums.size).bsearch { |i| nums[i] != nums[i ^ 1] }] end