算法总结
CqZtw
coder!
展开
-
回溯法
带剪枝操作的dfs(用于寻找所有解集) 1.递归出口(满足最后条件跳出递归) 2.站在此节点,遍历所有可能的选择(理解成解集树,比如在一个矩阵里,从某一个节点出发,有上下左右四种选择。一般用for循环遍历,将总问题分解成一个个相同的子问题) 3.回溯的核心。体现在如何剪枝 ①最常见的就是在进行下一步递归前执行list.add(),最后在return之前执行list.remove(),从而实...原创 2019-09-06 18:25:40 · 265 阅读 · 0 评论 -
二分查找
有序+查找(在有序数组中查找某个数,确定某个数应在的位置) 正常实现: 1.while(l<=r) 2.int mid=l+(r-l)/2; 3.return -1(正常实现:查找的数一定存在于数组) https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%...原创 2019-09-06 18:36:23 · 313 阅读 · 0 评论 -
背包问题
最初形态:01背包问题 有i种不同的物品,每种物品有对应的体积w,价值v,我们有一个体积为W的背包,要求每种类型的物品最多只能放一次(0-1) (1)求在背包体积的限制下,可以装下的最大物品价值 dp[i] = Math.max(dp[i, dp[i - w] + v); (2)判断是否恰好可以将背包装满(是否可以把一个数组分成和相等的两部分)dp[0]=true;dp[i]=dp[i...原创 2019-09-07 09:17:23 · 235 阅读 · 0 评论