随笔分类 -  算法题

二分查找
摘要:https://mp.weixin.qq.com/s/txc67CoIBBUAowmim6TRZA https://labuladong.online/algo/frequency-interview/binary-search-in-action/ 阅读全文
posted @ 2025-08-25 17:10 boluke龙 阅读(16) 评论(0) 推荐(0)
位运算
摘要:https://niumacode.com/training/144/problem/P1722 #include <iostream> #include <vector> #include <unordered_set> using namespace std; int n, m; vector< 阅读全文
posted @ 2025-08-12 16:31 boluke龙 阅读(10) 评论(0) 推荐(0)
二分
摘要:于每次查找,都会使得查找区间缩减为原来的一半,即如果查找区间为1024,只需要10次查找即可得到结果。 即不论查找是否成功,该算法的查找次数一定是O(logn)级别,因此时间复杂度为O(logn)。 模板 关于二分查找的模板有很多种,多为区分不同情况来使用不同的模板,个人感觉很容易用错。这里只推荐下 阅读全文
posted @ 2025-08-12 15:35 boluke龙 阅读(8) 评论(0) 推荐(0)
差分数组
摘要:差分数组是一种用于高效处理区间更新和区间查询的数据结构,特别称为差分序列。它的核心思想是通过记录数组元素之间的差值,将多次次区间更新操作优化为常数时间操作,非常适合处理频繁的区间增减问题。 差分数组的基本原理 假设有一个原始数组 arr,我们定义其差分数组 diff 如下: diff[0] = ar 阅读全文
posted @ 2025-08-12 10:14 boluke龙 阅读(61) 评论(0) 推荐(0)
在用堆或优先级队列处理问题时
摘要:https://niumacode.com/training/121/problem/P1656 需要注意 在提取操作中检查优先级是否为最新,是为了解决“堆中存在旧版本数据”的问题,确保提取的是当前经验池中真实有效的高优先级经验。这一设计源于优先级队列(堆)的特性限制,具体原因如下: #includ 阅读全文
posted @ 2025-07-23 15:33 boluke龙 阅读(8) 评论(0) 推荐(0)
复杂的dij和二叉堆
摘要:https://labuladong.online/algo/data-structure/dijkstra-follow-up/#带限制的最短路径问题 https://labuladong.online/algo/problem-set/dijkstra/#_787-k-站中转内最便宜的航班 ht 阅读全文
posted @ 2025-07-09 14:54 boluke龙 阅读(36) 评论(0) 推荐(0)
链表
摘要:class ListNode { public: int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; 实际使用 private: template <typename E> class Node { public: 阅读全文
posted @ 2025-07-07 10:07 boluke龙 阅读(8) 评论(0) 推荐(0)
队列以及滑窗应用在最长子序列上
摘要:在C++ STL中,queue和deque的入队和出队操作有明确的规范,但它们的行为有所不同。以下是详细说明: 1. std::queue(队列,FIFO) 入队(push):加到队尾queue<int> q; q.push(1); // 队尾:[1] q.push(2); // 队尾:[1,2] 阅读全文
posted @ 2025-07-03 17:16 boluke龙 阅读(55) 评论(0) 推荐(0)
用树结构来得到最短通路和dp树形问题
摘要:树的性质:利用树的唯一路径特性,避免复杂的最短路径计算。 定理:一定先完成同一子树下目标点的遍历,故需要记录父节点和遍历次序,通过逆序bfs来实现自下而上,通过父节点记录来累加得到父节点的累计值(因为记录了父节点故有严格的两边关系,不需要按照dfs的后序来实现子树下的累加) 分步骤拆解 建树:用邻接 阅读全文
posted @ 2025-07-02 11:34 boluke龙 阅读(30) 评论(0) 推荐(0)
贪心
摘要:将问题分解为子问题(局部问题),在每个局部问题求最优解,叠加,得到整体最优解 阅读全文
posted @ 2025-07-01 15:24 boluke龙 阅读(15) 评论(0) 推荐(0)
ACM模式下解析形如 [[a1,b1],[a2,b2],...,[am,bm]] 的输入字符串
摘要:原题:https://niumacode.com/training/112/problem/P1630 acm模式下处理形如: [[a1,b1],[a2,b2],...,[am,bm]]的以一行字符串输入的二维数组。 string line; getline(cin, line); // 处理输入字 阅读全文
posted @ 2025-07-01 11:42 boluke龙 阅读(22) 评论(0) 推荐(0)
完全背包、多维与多重限制
摘要:三、总结:遍历顺序的核心逻辑 场景 遍历顺序要求 核心原因 01背包(二维dp) 先物品/先容量均可,容量正序 依赖上一行数据,无覆盖问题 01背包(一维dp) 先物品,后容量,容量倒序 避免覆盖上一行数据,保证物品只选一次 完全背包(最大价值) 先物品/先容量均可,容量正序 允许覆盖当前行数据,实 阅读全文
posted @ 2025-06-27 17:25 boluke龙 阅读(35) 评论(0) 推荐(0)
dp动态规划-01背包
摘要:dp https://leetcode.cn/problems/unique-paths-ii/submissions/639090270/ 确定dp数组(dp table)以及下标的含义 即:从0,0 出发到i,j的不同路径:dp[i][j] 确定递推公式 即dp[i][j]能由什么得到,比如:d 阅读全文
posted @ 2025-06-25 10:24 boluke龙 阅读(68) 评论(0) 推荐(0)
最小生成树prim(遍历全节点的最短路径)
摘要:prim算法 输入 这种点之间的距离创造邻接矩阵来储存横纵坐标节点的距离。 这些vector的初始化都要赋值(一般INT_MAX,没有边则保留) 储存边的权值: vector<vector<int>> dis(n+1,vector<int>(n+1,10001)); int x,y,k; while 阅读全文
posted @ 2025-06-12 20:11 boluke龙 阅读(43) 评论(0) 推荐(0)
滑窗问题、dijsktra
摘要:基于刚刚说过的单调队列pop和push的规则,代码不难实现,如下: 滑窗用一个单调队列维持 同理实现acm滑窗最小 C++代码如下: #include <iostream> #include <vector> #include <deque> #include <sstream> #include 阅读全文
posted @ 2025-06-05 20:07 boluke龙 阅读(23) 评论(0) 推荐(0)