有效三角形leetcode611 ->双指针,二分
二分法详解
注意点(页面查找关键字)
1、while有无等号,对应的边界情况
2、使得区间不断向右收缩 ->区间到底往右还是往左
双指针->leetcode救生艇881
快慢指针->删除列表重复项、判断链表是否有环
回溯是一种算法思想, 可由迭代和递归实现,迭代和递归是算法结构。递归里一定有迭代,能用迭代的不用递归,递归调用函数,太深时时间开销大,并且递归太深容易造成堆栈的溢出。用空间换取时间,消除递归,空间换时间取消递归
回溯进行剪枝,减小无效搜索,无效时先return
搜是否存在某路径;是否存在和为多少的路径(有多少个)等等
1、退出条件,何时return
2、 多个条件 or 在一起
上下左右走
dfs(i + 1, j, k + 1) or dfs(i - 1, j, k + 1) or dfs(i, j + 1, k + 1) or dfs(i, j - 1, k + 1)
其中k+1用来记录走了多少步了,
于是判断条件
if k == len(word) - 1: return True #走到了最末一步就返回ture
剪枝,此步骤放到上下左右走的前面,提前return false实现剪枝不再进行上下左右
if not 0 <= i < len(board) or not 0 <= j < len(board[0]) or board[i][j] != word[k]: return False