02 2025 档案
摘要:思路 令待交换的两个数为“小数”和“大数” 1. 从后往前找第一个升序对i,j使得nums[i]<nums[j]。“小数”就是nums[i]。此时[j,end)必然是降序 2. 再从后往前找一个比“小数”大的数作为“大数”,交换二者 3. 交换后将“大数”后的所有数重新排为升序:此时[j,end]仍
阅读全文
摘要:回溯 分割回文串 思路 回溯模板:每次传入起始位置,for循环遍历不同子串,若子串回文则递归;直到起始位置==s.size() 代码 class Solution { public: vector<vector<string>> result; vector<string> path; void b
阅读全文
摘要:一、堆的基本操作 以大根堆为例 包括——初始化堆、调整堆、插入元素和删除元素 对应时间复杂度为O(n)(自底向上建堆),O(logn),O(logn),O(logn) 插入操作:先将新元素添加到堆的末尾;如果它比父节点更大则交换,直到更小。 删除操作是:把堆顶和堆底元素交换,然后再调整[堆顶,堆底前
阅读全文
摘要:一、回溯算法能解决如下问题: 组合问题:N个数里面按一定规则找出k个数的集合 排列问题:N个数按一定规则全排列,有几种排列方式 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 棋盘问题:N皇后,解数独等等 二、回溯法的模板: void backtrac
阅读全文
摘要:思路 每个腐烂橘子向四周感染一次,直到没有新鲜橘子所需的最少时间。其中一定设计图的遍历,那么是DFS还是BFS?因为要求一层层感染完的最少时间,所以用BFS。即把腐烂橘子放入队列,每次感染一波出队,再把新感染的入队,直到所有腐烂橘子都向四周感染过一次。 为了判断是否有橘子永远不会被感染,还要记录一开
阅读全文
摘要:单调栈 要求「从 栈顶 到 栈底 的元素是单调递增(或者单调递减)」。其中满足从栈顶到栈底的元素是单调递增的栈,叫做「单调递增栈」。满足从栈顶到栈底的元素是单调递减的栈,叫做「单调递减栈」。(有的文章是从栈底到栈顶,本文默认从栈顶到栈底) 怎么能想到用单调栈呢? 什么时候用单调栈呢? 通常是一维数组
阅读全文