编程语言能力
五选一
细心、耐心、恒心。
展开
-
【刷题笔记12】算法反射弧
看到一道题,第一反应想到用什么方法解题?若dfs超时,可考虑动态规划,剪枝,可考虑是否可以二分答案。递归改动态规划,几个可变参数维护几维数组unordered_mp :哈希,key-val 的类型可以有很多种,key也可以是指针。哪些编码习惯,能降低时间复杂度vector的构造比 pair的耗时。queue<pair<int, int>> 时间复杂度优于queue<vector>new 的操作很耗时,程序代码不能循环newunordered_map&原创 2021-08-18 22:48:36 · 178 阅读 · 0 评论 -
【刷题笔记11】滑动窗口-双指针
// 904.水果成篮int totalFruit(vector<int>& tree, int K) { int n = tree.size(); int left = 0; int right = 0; vector<int> mp(n, 0); int ans = INT_MIN; int count = 0; while (right < n) { if (mp[tree[rig原创 2021-07-22 00:05:16 · 165 阅读 · 0 评论 -
【刷题笔记10】博弈、记忆化DFS、DP
// 小技巧:二进制位标记某个数是否被选择。(<32位的时候)// state = state | (1 << i)// (state & (1 << i)) != 0 // 表示位标记// 464. 我能赢吗? https://leetcode-cn.com/problems/can-i-win/// 记忆化dfs、博弈class Solution {public: map<pair<int, int>, bool> mp;原创 2021-07-16 23:59:15 · 185 阅读 · 0 评论 -
【刷题笔记9】拓扑排序 - 有向无环图
拓扑排序拓扑序:在图中从顶点u到顶点v有一条有向路径,则顶点u一定排在顶点v之前。满足这样的条件的顶点序列称为一个拓扑序。有向无环图:DAG - Directed Acyclic Graph入度:有向图的某个顶点作为终点的次数和。出度:有向图的某个顶点作为起点的次数和。class Solution {public: vector<int> findOrder(int numCourses, vector<vector<int>>& prereq原创 2021-07-13 00:05:50 · 198 阅读 · 0 评论 -
【刷题笔记8】二叉树 - DFS, 有些问题辅助使用map/set/vector
二叉树二叉树,优先想到DFS。可能遍历存储所有路径,可使用set/map存储需要删除的节点。二叉查找树:(Binary Search Tree) 二叉搜索树定义:任意节点的左子树中的键值都 小于 此节点的键值。任意节点的右子树中的键值都 大于 此节点的键值。任意节点的左子树和右子树都是二叉搜索树。// 判断是否是二叉查找树?bool IsBST(TreeNode* node, int minVal, int maxVal){ if (node == nullptr) {原创 2021-06-17 00:30:03 · 82 阅读 · 0 评论 -
【刷题笔记7】区间问题 - 覆盖,相交,不相交
区间问题 [start, end] 排序,start升序,end降序。 画图。 区间有几种情况:覆盖,相交、不相交 判断两个区间是否相交? [s1,e1] [s2, e2]int start = max(s1, e1);int end = min(s2, e2);if (start <= end) { // 有交集}// 1288.删除被覆盖区间class Solution {public: static bool cm...原创 2021-06-09 00:02:50 · 167 阅读 · 0 评论 -
【刷题笔记5】二分查找 - 注意边界值、数组有序
刷题笔记: 二分查找注意计算mid时的整形溢出边界值判断数组必须是有序的1. 基本二分查找局限性:无法查找target的左右侧边界int binarySearch(vector<int>& nums, int target){ int left = 0; int right = nums.size() - 1; while (left <= right) { int mid = (right - left) / 2 + left; if (nums[原创 2021-05-11 23:45:02 · 261 阅读 · 0 评论 -
【刷题笔记4】并查集 - 实现并查集类,求解连通性问题
并查集class UnionFind{private: vector<int> parent; vector<int> rank; int count; // 省份个数public: UnionFind(unsigned int size) { for (int i = 0; i < size; i++) { parent.push_back(i); // 自己的祖先是自己原创 2021-05-08 00:10:58 · 142 阅读 · 0 评论 -
【刷题笔记3】DFS-递归,遍历,求所有可能的解
DFS核心思想:递归数据结构:栈// dfs模板void dfs(路径,选择列表) { if (终止条件) { 存放结果; // 若只需要一个解,只需要检查dfs的返回值,直接返回即可 return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { // 如上下左右等,(有时,需按照题意,构造选择的集合) // 排除不合法的选择; // 做选择;同时将该选择从选择列表中移除原创 2021-05-06 23:44:34 · 296 阅读 · 0 评论 -
【刷题笔记6】前缀和 + 差分数组
前缀和的应用场景是,需要对某个区间[i…j]频繁查询累计和,避免每次查询都遍历这个区间。差分数组的应用场景是,需要对某个区间[i…j]频繁地加或减某一值,避免每次都遍历这个区间。前缀和:sums[i] = sums[ i - 1] + nums[i];差分数组:diff[i] = nums[i] - nums[i - 1]; 由diff反推前数组。eg, 要对[i,...,j]区间内的元素整体+3,则令diff[i] += 3, diff[j + 1] -= 3即可,复杂度O(1)。// 和为K原创 2021-03-17 23:59:01 · 176 阅读 · 0 评论 -
【刷题笔记2】BFS - 队列,遍历,寻找最短路径
BFS 寻找最短路径,队列,遍历原创 2020-11-29 22:43:58 · 299 阅读 · 0 评论 -
【刷题笔记1】单调栈 - 定位边界问题,快速寻找边界
单调栈:定位边界问题,快速寻找边界0 概念单调栈分为单调递增栈和单调递减栈单调递增栈即栈内元素保持单调递增的栈单调递减栈即栈内元素保持单调递减的栈1 操作规则(单调递增栈)如果新的元素比栈顶元素大,就入栈如果新的元素较小,那就一直把栈内元素弹出来,直到栈顶比新元素小加入这样一个规则之后,会有什么效果:栈内的元素是递增的当元素出栈时,说明这个新元素是出栈元素向后找第一个比其小的元素stack<int> st;for(int i = 0; i < nums原创 2020-11-29 18:34:40 · 162 阅读 · 0 评论 -
【刷题笔记0】刷题从掌握常用STL 容器开始
工欲善其事,必先利其器。刷题从掌握常用STL 容器开始。原创 2020-11-22 20:23:48 · 231 阅读 · 0 评论