binary search

main
Jason Staten 2 years ago
parent 7b82c24907
commit cda6656598

@ -0,0 +1,36 @@
package binarysearch
import "sort"
func search(nums []int, target int) int {
start := 0
end := len(nums) - 1
for start <= end {
mid := (start + end) / 2
if nums[mid] == target {
return mid
} else if nums[mid] > target {
end = mid - 1
} else if nums[mid] < target {
start = mid + 1
}
}
return -1
}
func Search(nums []int, target int) int {
return search(nums, target)
}
// Uses sort.SearchInts
func SearchStdLib(nums []int, target int) int {
idx, found := sort.Find(len(nums), func(i int) int {
return target - nums[i]
})
if found {
return idx
}
return -1
}

@ -0,0 +1,39 @@
package binarysearch_test
import (
"testing"
bs "git.jxs.me/leetgo/binarysearch"
"github.com/stretchr/testify/require"
)
func TestEmpty(t *testing.T) {
require.Equal(t, -1, bs.Search([]int{}, 7))
}
func TestSingle(t *testing.T) {
require.Equal(t, 0, bs.Search([]int{6}, 6))
}
func TestTwo(t *testing.T) {
require.Equal(t, -1, bs.Search([]int{2, 5}, 0))
}
func TestMulti(t *testing.T) {
require.Equal(t, 5, bs.Search([]int{1, 2, 3, 4, 5, 6, 7}, 6))
}
func TestMultiEnd(t *testing.T) {
require.Equal(t, 6, bs.Search([]int{1, 2, 3, 4, 5, 6, 7}, 7))
}
func TestMultiStart(t *testing.T) {
require.Equal(t, 0, bs.Search([]int{1, 2, 3, 4, 5, 6, 7}, 1))
}
func TestExample1(t *testing.T) {
require.Equal(t, 4, bs.Search([]int{-1, 0, 3, 5, 9, 12}, 9))
}
func TestExample2(t *testing.T) {
require.Equal(t, -1, bs.Search([]int{-1, 0, 3, 5, 9, 12}, 2))
}

@ -0,0 +1,29 @@
704. Binary Search
Easy
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.
Loading…
Cancel
Save