算法总结
算法关注:算法复杂度。了解语言内建数据结构和算法的复杂度。
1.序列内循环数数
a_list=list(range(30)
a)如果要在a内不断按1-9循环,列出第9个数。前27个很方便,不断的i+1,然后到9之后归零。那27以后呢,可以还是不断i+1,如果大于30则减30,就会从头开始循环。
b)数数的时候,不一定总是i+1的循环,如果是列出第9个,那可以每次直接i+8,。注意如果数到的数被删除,则每次i+8,如果不删除,则第一次是i+8以后每次都是i+9,因为第一次是从第一个数开始数的,那到第9个就是+8,但是第二次开始,是从第0个开始数的,所以+9
2.二分查找
用while替代
def test_b(array,target): s=0 end=len(array)-1 while end>=s: mid=int((end-s)/2)+s #记得加上起始位 if array[mid]==target: return mid elif array[mid]>target: end=mid-1 #已经检查过的就不要了 else: s=mid+1 return -1
def test_b1(array,lenth,target): mid=int(len(array)/2) if array[mid]==target: if lenth: mid=lenth-(len(array)-mid) #截取后要计算在原来的list中的位置 return mid elif array[mid]>target: return test_b1(array[:mid],None,target) else: return test_b1(array[mid+1:],lenth,target)
3.二叉树遍历
二叉树就是每个节点下面都有左右两个节点的数。每个节点的最后一层可以只有一个节点,但是区分左右几点。
3.1 层次遍历:
从最上层开始,一层层从做到右遍历
3.2先序搜索:
经过这点的左边(第一次经过该点)时,记录该点
3.3中序搜索:
经过这点的中间(第二次经过该点)时,记录该点
3.4后序搜索:
经过这点的右边(第三次经过该点)时,记录改点
如下图左边所示,每个二叉树都可以用下面的方式走完整棵树,如下图右边所示,每个点都会被走到三次