# 1、在有序表中查找两数组指定的和,双指针法# 2、滑动窗口 : 连续子数组之和# 3、二分查找 : 顺序数组中查找特定的值 # 4、递归程序的真正的构建是从底向上的,这就是为什么递归终止条件要写在最前面# 参见 反转链表的递归程序 LeetCode206 # 5、 链表归并排序的递归过程,要好好体会一下 # 6、树型的暴力搜索(全路径搜索 、DFS )需要进行回溯 参见 LeetCode 93 # 7、利用 return 能使树型递归提早结束,类似于DFS 参见 LeetCode 37 # 8、记忆化搜索,自上而下的解决问题、 动态规划,自下而上的解决问题 参见斐波那契数列 # 9、记忆化递归时,一开始就需要判断原问题是否被再次遇到,若遇到则返回记忆值,若没遇到则# 进入递归过程,并更新记忆值 错误来源参见 LeetCode 198 # 10、递归返回的过程,其实就是自底向上的构建过程(类似于动态规划)、 参见 LeetCode 337 刘宇波代码3 # 11、深度递归和层次递归的感悟: 参见LeetCode 322 #深度递归需要使用传递状态参数,并一般使用全局变量更新最优解 #层数递归只需要考虑底层和上一层的递推关系,一般不使用全局变量 # 12、01背包问题:一个序列的各个元素都有选与不选两种状态 # 20190113 # 13、数组的记忆化递归和字典的记忆化递归? LeetCode 137 20190119 # 14、动态规划难的是状态的定义, 如 LeetCode 376 上升沿和下降沿的状态 # 15、动态规划状态定义的一般原则是F(n,r):n是问题规模,r是该规模下的特定限定,比如LeetCode 376# 的状态定义就是一个很好的启示 # 16、动态规划总结:1)解空间树加重复子问题 生长学习法# 2)最优问题: 最大值最小值……# 3)子问题的同质: 都是连续序列、矩阵……# 4)重复问题: 空间换时间 状态矩阵# 5)从顶向下:记忆数组 从底向上:递推 终局思想 本质是同一个东西。 20190228 # 17、编程要注意状态的定义,变量的代表含义 ,如直接插入排序 j代表a[i]直接要插入的空预留位值,j-1 要不断的# 与temp=a[i] 比较 :即要找到 a[i] 插入的最终位置。 # 算法面试一定要先实现出来,然后再考虑优化的可行性。# 算法注重的是思想,如leetcode 108 怎样才能想到用递归的思想呢?# 总的来说还是我的编程思想的素养不够呀 --20190305# 编程题要进行一定的抽象建模 如 LeetCode 235 二叉树搜索树的公共祖先问题。# 编程时一定要注意函数的定义是什么? 如Leetcode 236 函数的定义是返回最终的答案 20100305# 编程问题也要注意分治讨论:即划分问题的子空间:# 如 leetcode404 : 1)根节点有左叶子 2)根节点没左叶子 # 20190302 找工作期间 总结#18、 数组类问题:# 1)滑动窗口# 2)查找表# 解空间树# 1)初值状态的确定# 2)搜索策略 : 剪支 (优化问题)# 递归和分治类问题:是个基本的编程思想(函数的定义很重要)# 1)递归返回值的处理: # 要定义好函数的返回逻辑或状态或者值,并从底向上构建 # 如 leetcode 108 和 113 20190305# 2)递归程序的编写:# # 先写返回条件 # 返回条件写好了,就可以当做函数功能已经完成,并可以分治的解决问题了# 3) 数据结构有递归结构,要考虑一下递归的算法 # 如数组、链表、二叉树等 20190305# 4)visit 数组用于去重# 5)状态出栈用于回溯# 动态规划:# 1)初值的设定是关键:a 状态函数的定义可以说明函数的初值 如 01背包问题# b 初值的设置技巧可以用最小规模数据进行验证# 2)状态的递推顺序:新值必须在旧值的基础上# 20190306# 贪心:最强烈的状态给最强烈的需求 :分饼干 20190306# 1)证明过程只能是反证法#
原文地址:https://www.cnblogs.com/lux-ace/p/10546981.html
时间: 2024-11-05 23:31:37