本文共 904 字,大约阅读时间需要 3 分钟。
二分查找:时间复杂度O(log n),有序的情况下
go语言实现:func erFen(nums []int, key, n int) int { var low, high, mid = 0, n, 0 for { mid = (high + low) / 2 if key < nums[mid] { high = mid - 1 } else if key > nums[mid] { low = mid + 1 } else { return nums[mid] } if high < low { return -1 } } return -1}
一个特殊的时间复杂度:O(n! ),旅行商问题,去不同距离的的n个地方选最短路径
递归和循环:二者在比较起来递归并没有性能优势,只是相对于循环的代码更加清晰,在实际使用中循环的性能要好于递归
递归函数的两部分:基线条件和递归条件//计算n个数累加func diGui(a int) int { if a <= 0 { //基线条件 return 0 } return a + diGui(a-1) //递归条件}
调用栈:计算机在内部使用被称为调用栈的栈
步骤:
func erFenD(nums []int, key, low, high int) int { if low <= high { //基线条件 mid := (low + high) / 2 if nums[mid] == key { //基线条件 return mid } else if key > nums[mid] { //递归条件 return erFenD(nums, key, mid+1, high) } else if key < nums[mid] { //递归条件 return erFenD(nums, key, low, mid-1) } } return -1}
转载地址:http://fcfkb.baihongyu.com/