Algorithm 算法
- 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
【思路】
这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,那么结果就不是唯一。二分法的前提需要注意。
递归函数,二分查找。
先找出数组的中间值,然后判断大小,继续找中间值,判断大小。
判读结束条件
1
2
3
4
5
6
7
8
9
10
11
12
|
def search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package main
import "fmt"
func search(nums []int, target int) int {
left := 0
right := len(nums) - 1
for left <= right {
mid := left + (right-left)/2 // 防止整数溢出
if nums[mid] == target {
return mid
} else if nums[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return -1
}
func main() {
nums := []int{-1, 0, 3, 5, 9, 12}
target := 9
result := search(nums, target)
fmt.Printf("Target %d found at index: %d\n", target, result) // 输出 4
target = 2
result = search(nums, target)
fmt.Printf("Target %d found at index: %d\n", target, result) // 输出 -1
}
|
Review 复审(英语)
Tip 小技巧
考了一个无人机的证书,可以抵税,分享一下大概的攻略
考试网址及流程
相关题库内容
Share 技术分享
cs 自学指南
那些你不知道的TCP冷门知识
我们高估了智力的重要性
深入理解四种经典负载均衡算法
TODO
- cs相关的专业知识