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