前言
二分查找是力扣上的一道简单题,题号704。评论里面有人戏称这题这叫做算法第一题。
也许是因为它是《图解算法》上的第一道题目吧,这本书对于新人确实是比较友好。
题目描述:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
解题思路:
定义两个指针,一个在数组的最左侧,一个在数组的最右侧。当左指针小于等于右指针,每次取数组的中间那个元素,将目标值与中间元素对比。如果目标值大于中间元素,则将左指针移到中间值索引 + 1的位置。如果目标值小于中间元素,则将右指针移动到中间值索引 - 1的位置。如果目标值等于中间元素则返回索引。
javascript代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const search = (nums, target) => { let left = 0, right = nums.length - 1 while(left <= right) { let mid = Math.floor((left + right)/2) let num = nums[mid] if (target === num) { return mid } else if (target > num ) { left = mid + 1 } else { right = mid - 1 } } return -1 }
|
go代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| func search(nums []int,target int) int { left,right := 0,len(nums) - 1 for left <= right { mid := (left + right)/2 num := nums[mid] if target == num { return mid } else if target > num { left = mid + 1 } else { right = mid - 1 } } return -1 }
|