# frozen_string_literal: true # 704. Binary Search # https://leetcode.com/problems/binary-search =begin Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1. You must write an algorithm with O(log n) runtime complexity. ### Example 1: Input: nums = [-1,0,3,5,9,12], target = 9 Output: 4 Explanation: 9 exists in nums and its index is 4 ### Example 2: Input: nums = [-1,0,3,5,9,12], target = 2 Output: -1 Explanation: 2 does not exist in nums so return -1 ### Constraints: * 1 <= nums.length <= 104 * -104 < nums[i], target < 104 * All the integers in nums are unique. * nums is sorted in ascending order. =end # Runtime: 100 ms # Memory: 213.7 MB # @param {Integer[]} nums # @param {Integer} target # @return {Integer} def search(nums, target) nums.bsearch_index { |i| target - i } || -1 end # **************** # # TEST # # **************** # require "test/unit" class Test_search < Test::Unit::TestCase def test_ assert_equal 4, search([-1, 0, 3, 5, 9, 12], 9) assert_equal(-1, search([-1, 0, 3, 5, 9, 12], 2)) end end