欢迎访问我的博客

滑动窗口

  常用在数组和字符串的操作上面。
  可以用来解决一些查找满足一定条件的连续区间的性质(长度等)的问题。由于区间连续(单调递增或者单调递减)
  因此当区间发生变化时,可以通过旧有的计算结果对搜索空间进行剪枝,这样便减少了重复计算,降低了时间复杂度。
  往往类似于“ 请找到满足 xx 的最 x 的区间(子串、子数组)的 xx ”

动态规划,

  是一种暴力方法,下一步的操作时通过上一步的某条件达到的。
  写出表达式和约束条件即可达到目的
  动态规划一般会超出时间限制,如果是dp就生成一维数组,如果是dp[i][j]就生成二维数组。
  反正就是个多维数组保存每一种情况下的办法。

分治法

  一个问题可以拆成两个或多个“相似”的小问题,就一定要用分治法。
  因为小问题可以拆到简单的直接求解

回朔法,深度遍历dfs

  是一种暴力方法
  试探性一步一步的看能否到达终点。
  如果当前的方法可行满足约束条件,且下一步操作也可行。就往下走
  如果下一步是死路就不往下一步走,悔棋,更换当前的可行方法是自己满足约束条件

单调栈

  维护一个单调递增或者单调递减的栈。如果是递减栈,遇到一个比栈顶元素还要小的元素,
  就一直推出元素直到这个元素作为栈顶元素时依旧是一个递减栈。
  通常用这种数据结构解决一种公共区间内最大或最小值。
  比如木板长短不一怎样能打最多的水,柱状图的最大矩形。

二分法

  一种搜索方法,在一种具有单调性的队列中,快速搜索目标

总结

  1. 如果遇到必须用暴力的算法来解决的问题,一般都会用一个栈来进行维护减少重复操作。
    就比如回朔法,给之前走过的可行步骤做一个存储,如果下一步骤可行的操作在存储里存在
    就调用存储的方法
  2. 能用dp算法的一般也能用回朔法。如果当前可选择的方法量比较少推荐用回溯

河畔的风
31 声望2 粉丝

吾乃江东小霸王,一套连招秒脆皮。


下一篇 »
排序算法