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…
Reference in new issue