1.递归
1.1 代码实现
public void recur(int level,int param){
if(level > MAX_LEVEL){
return;
}
process(level,param);
recur(level:level+1,newParam);
}
1.2 思维要点
1.不要人肉递归(最大误区)
2.找到最近最简方法,将其拆成可重复解决的问题(重复子问题)。
3.数学归纳法整理
2.回溯法
2.1 代码实现
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
2.2 思维要点
回溯法主要是通过递归来实现的。
1.找到一个可能存在的正确的答案。
2.在尝试了所有可能的分步方法后宣告该问题没有答案。
ps:在最坏的情况下,回溯法会导致一个复杂度为指数时间的计算。
3.二分查找
3.1 代码实现
left , right = 0,len = array.length-1;
while(left <= right){
mid = (left + right) / 2;
if(array[mid] == target)
return result;
else if(array[mid] < target)
left = mid + 1;
else
right = mid-1;
}
3.2 思维要点
二分查找的前提
1.目标函数单调性(单调递增或递减)
2.存在上下界(bounded)
3.能够通过索引进行访问(index accessible)
4.分治
4.1 代码实现
4.2 思维要点
分而治之的思想。将一个大的问题分解成多个重复的子问题。先解决每个子问题,在将子问题求解。而递归只是实现分子的一种手段而已、
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步