随笔分类 -  算法随想

小白刷题,望多多指教
摘要:LC738. 单调递增的数字 用queue容器辅助实现的版本 int monotoneIncreasingDigits(int n) { deque<int> que; int temp = n; while (temp > 0) { que.emplace_front(temp % 10); te 阅读全文
posted @ 2023-03-09 22:54 冥紫将 阅读(23) 评论(0) 推荐(0)
摘要:LC435. 无重叠区间 贪心表现在每一步,都保证右边界尽量靠左,若两个区间出现重叠冲突,将右边界更新为两者右边界中较小的那个。 如排序后,[1,5],[2,4],[4,8],[5,6],[6,7],初始右边界为5,遇到[2,4]有冲突,+1并更新右边界为4,访问[4,8]后,right为8,遇到[ 阅读全文
posted @ 2023-03-06 08:58 冥紫将 阅读(47) 评论(0) 推荐(0)
摘要:LC860. 柠檬水找零 bool lemonadeChange(vector<int>& bills) { int C5 = 0, C10 = 0; for (int i = 0; i < bills.size(); ++i) { if (bills[i] == 5) { ++C5; } else 阅读全文
posted @ 2023-03-06 08:57 冥紫将 阅读(19) 评论(0) 推荐(0)
摘要:LC1005. K 次取反后最大化的数组和 借用评论区的一句话——“普通人思维,无数个if else”。 void NegationsLoop(vector<int>& nums, int k, int pos) { if (k % 2 != 0) nums[pos] = -nums[pos]; } 阅读全文
posted @ 2023-03-06 08:56 冥紫将 阅读(27) 评论(0) 推荐(0)
摘要:LC122. 买卖股票的最佳时机Ⅱ 一旦遇到相比于昨天降价的,就抛出,就购入低价的,直到又遇到下一个滑坡点,又立即抛出,计算收益 贪心算法表现在:总是在降价前抛出,获取收益,总是在降价当前抛出 这道题的另一个思考角度是,对原数组如[7,1,5,3,6,4],除第一天外求取利润数组,即[-6, 4, 阅读全文
posted @ 2023-03-04 11:27 冥紫将 阅读(32) 评论(0) 推荐(0)
摘要:LC445. 分发饼干 int findContentChildren(vector<int>& g, vector<int>& s) { int count = 0; sort(g.begin(), g.end()); sort(s.begin(), s.end()); for (int i = 阅读全文
posted @ 2023-03-03 17:43 冥紫将 阅读(41) 评论(0) 推荐(0)
摘要:LC332. 重新安排行程 做了很久,还是没有通过全部案例,最后是一个输入为100个元素的数组,运行超出时间限制。 LC51. N皇后 实现了回溯算法中的超暴力解法,主要是对某个节点的斜线,在用数学式去表示的思想没想到。 官方解法: auto columns = unordered_set(); / 阅读全文
posted @ 2023-03-02 23:42 冥紫将 阅读(23) 评论(0) 推荐(0)
摘要:跟“去重”相关的题目: 三数之和 组合之和Ⅱ 子集Ⅱ 递增子序列 在回溯算法题目中,去重问题分为**“树层去重”和“树枝去重”** 之前组合之和、子集中的去重使用的方法都是先排序,使用prev_pop记录每次在temp中pop出的值,解决的是“树层去重”。因为题目要求的是在当次temp中,是允许有重 阅读全文
posted @ 2023-03-01 22:54 冥紫将 阅读(46) 评论(0) 推荐(0)
摘要:LC93. 复原IP地址 细节太多了(调了不久才调通): 剪纸操作和不合法的直接返回 段位以0为开头的数字不合法 段位如果大于255了不合法 段位里有非正整数字符不合法(但题意说明字符串只包含数字) 终止条件的判断:用完s中的全部字符,且dot('.')个数要符合要求 开始用s = "10123"来 阅读全文
posted @ 2023-02-28 23:39 冥紫将 阅读(57) 评论(0) 推荐(0)
摘要:LC39. 组合总和 vector<int> temp; int sum = 0; void combinationSumLoop(vector<vector<int>>& result, vector<int>& candidates, int index, const int& target) 阅读全文
posted @ 2023-02-27 20:40 冥紫将 阅读(38) 评论(0) 推荐(0)
摘要:LC216. 组合总和 Ⅲ 与昨天的“LC77-组合”类似,就是在昨天终止条件只需计算元素个数的基础上,再加一个总和为规定值的条件,回溯时,把sum、count、temp这些变量都一起回溯 int sum = 0; int count = 0; vector<int> temp; void comb 阅读全文
posted @ 2023-02-25 13:56 冥紫将 阅读(32) 评论(0) 推荐(0)
摘要:回溯算法理论基础 回溯法,一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 排列问题:N个数按一定规则全排列,有几种排列方式 棋盘问题:N皇后,解数独等等 回溯法解决的问题都可以 阅读全文
posted @ 2023-02-24 15:00 冥紫将 阅读(45) 评论(0) 推荐(0)
摘要:LC669. 修剪二叉搜索树 相当于一个中序遍历吧,当某个节点<low时,其右子树的各个节点值虽然都比该节点值大,但仍可能存在<low的,所以要据于次节点,向其右子树进军遍历,等回溯时,delete掉该节点,返回的right要返回到上层递归,即该节点的父节点去接收这个right作为新的孩子节点。(奇 阅读全文
posted @ 2023-02-23 22:49 冥紫将 阅读(22) 评论(0) 推荐(0)
摘要:LC235. 二叉搜索树的最近公共祖先 利用二叉搜索树的特性,中序遍历,如果当前节点的值大于q和p的值,公共祖先一定在当前节点的左子树中,同理小于q和p值时,公共祖先一定在当前节点的右子树。一旦找到介于p和q之间值的节点,则一定是最近公共祖先 TreeNode* lowestCommonAncest 阅读全文
posted @ 2023-02-22 11:56 冥紫将 阅读(20) 评论(0) 推荐(0)
摘要:LC530. 二叉搜索树的最小绝对差 这道题只要是在思考怎么不用另外写多一个函数进行递归,且不用多定义一个成员变量min_result,如下所示: int min_result = INT_MAX; TreeNode* prev = nullptr; void getMinDiffLoop(Tree 阅读全文
posted @ 2023-02-21 11:47 冥紫将 阅读(23) 评论(0) 推荐(0)
摘要:LC654. 最大二叉树 内存消耗只击败10% TreeNode* buildTree(vector<int> nums) { int max = nums[0]; int index = 0; for (int i = 1; i < nums.size(); i++) { if (nums[i] 阅读全文
posted @ 2023-02-20 23:23 冥紫将 阅读(29) 评论(0) 推荐(0)
摘要:总结思考: 目前涉及基于二叉树的特性,进行递归的方案有如下: 左右子树不相干的递归 回溯,左右子树不相干的递归:用前序遍历,先处理"中"节点,判断是否达到终止条件进行相关处理(终止条件为 if(root == nullptr) 或者 if(root->left == nullptr && root- 阅读全文
posted @ 2023-02-19 11:29 冥紫将 阅读(44) 评论(0) 推荐(0)
摘要:LC513. 找树左下角的值 这道题用层次遍历,更容易做 int findBottomLeftValue(TreeNode* root) { int result = 0; int size = 0; queue<TreeNode*> que; TreeNode* curr = nullptr; i 阅读全文
posted @ 2023-02-19 00:47 冥紫将 阅读(21) 评论(0) 推荐(0)
摘要:LC110. 平衡二叉树 递归做法一次通过,其实也就是对比:某个节点的左子树和右子树的最大深度的绝对值不大于1,即可认为是平衡二叉树 class Solution { public: bool flag; int checkBalanced(TreeNode* root) { if (root == 阅读全文
posted @ 2023-02-17 23:39 冥紫将 阅读(18) 评论(0) 推荐(0)
摘要:深度 二叉树任意一个节点到根节点的距离(这条路径包含的节点数) 高度 二叉树任意一个节点到叶子节点的距离 LC104. 二叉树的最大深度 递归解法 int maxdepth(treenode* root) { int leftdepth = 0, rightdepth = 0; if (root = 阅读全文
posted @ 2023-02-16 22:20 冥紫将 阅读(41) 评论(0) 推荐(0)