摘要:
思路 令待交换的两个数为“小数”和“大数” 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。即把腐烂橘子放入队列,每次感染一波出队,再把新感染的入队,直到所有腐烂橘子都向四周感染过一次。 为了判断是否有橘子永远不会被感染,还要记录一开 阅读全文
摘要:
单调栈 要求「从 栈顶 到 栈底 的元素是单调递增(或者单调递减)」。其中满足从栈顶到栈底的元素是单调递增的栈,叫做「单调递增栈」。满足从栈顶到栈底的元素是单调递减的栈,叫做「单调递减栈」。(有的文章是从栈底到栈顶,本文默认从栈顶到栈底) 怎么能想到用单调栈呢? 什么时候用单调栈呢? 通常是一维数组 阅读全文
摘要:
https://www.programmercarl.com/动态规划-股票问题总结篇.html#买卖股票的最佳时机含手续费 只能买一次 不断更新最小买入值,不断更新profit=prices[i]-buy 可以买卖多次 动态规划 - 定义dp数组 dp[i][1],dp[i][0]分别表示第i天持 阅读全文
摘要:
这道题目是 打家劫舍 III(House Robber III),是打家劫舍系列问题的变种。问题描述如下: 小偷发现了一个新的区域,这个区域的所有房屋排列类似于一棵二叉树。如果两个直接相连的房屋在同一晚被打劫,房屋会自动报警。给定这棵二叉树的根节点 root,求在不触发警报的情况下,小偷能够盗取的最 阅读全文