随笔分类 -  LeetCode刷题笔记

用于记录LeetCode的刷题心得
摘要:并查集 1. 概念 并查集主要是为了解决图论中的动态连通性的问题。现在主要的Union-Find算法主要实现两个API: class UF{ public: void union(int p, int q); bool connected(int p, int q); int count(); } 阅读全文
posted @ 2022-05-25 14:13 IU_UI 阅读(91) 评论(0) 推荐(0)
摘要:LeetCode刷题笔记之二分查找 二分查找 二分查找需要注意的点大致有以下几点: 注意左右边界的区间,是左闭右开还是左闭右闭,不同的区间对应下文的代码不同。 二分查找查找的是左右边界还是具体的位置,不同的情况对应的代码不同。 理解记忆 寻找一个数的二分查找 int binarySearch(vec 阅读全文
posted @ 2022-02-21 18:03 IU_UI 阅读(72) 评论(0) 推荐(0)
摘要:前缀和技巧 前缀和技巧适用于的场景是原始数组不会被修改的情况下,频繁地查询某个区间地累加和。 大致框架如下所示: class preSum{ public: vector<int> sums; preSum(vector<int>& nums) { int len = nums.size(); su 阅读全文
posted @ 2022-02-17 16:22 IU_UI 阅读(69) 评论(0) 推荐(0)
摘要:LeetCode刷题之动态规划算法 1.基本思路及代码框架 首先,动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。 而且,动态规划问题一定会具备「最优子结构」,才能通过子问题的最值得到 阅读全文
posted @ 2021-11-29 11:22 IU_UI 阅读(261) 评论(0) 推荐(0)
摘要:LeetCode刷题之BFS算法 1.基本思路及代码框架 BFS算法起源于二叉树的层序遍历,其核心是利用队列这种数据结构。 BFS的核心思想就是把一些问题抽象成图,从一个点开始,向四周扩散。一般来说,我们写BFS算法都是用到队列这种数据结构,每次将一个节点周围的所有节点加入队列。 BFS和DFS最主 阅读全文
posted @ 2021-11-25 13:18 IU_UI 阅读(268) 评论(0) 推荐(0)
摘要:LeetCode刷题之DFS算法 1.基本思路及代码框架 使用DFS或BFS算法遍历二维数组 在二维矩阵中使用DFS搜索,就是把二维矩阵中的每一个位置看成一个节点,这个节点的上下左右四个位置就是相邻节点,那么整个可以抽象为一幅网状的图结构。 根据数据结构和算法思维的框架,根据二叉树的遍历框架写出二维 阅读全文
posted @ 2021-11-24 12:43 IU_UI 阅读(794) 评论(0) 推荐(0)
摘要:LeetCode之搜索专题 1.回溯算法 回溯方法基本套路: result = []; def backtrack(): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择 1.LeetCode之 阅读全文
posted @ 2021-11-22 15:30 IU_UI 阅读(115) 评论(0) 推荐(0)
摘要:LeetCode刷题之洗牌算法 1.洗牌算法的思路 共有 n 个不同的数,根据每个位置能够选择什么数,共有 n! 种组合。 题目要求每次调用 shuffle 时等概率返回某个方案,或者说每个元素都够等概率出现在每个位置中。 我们可以使用 Knuth 洗牌算法,在 O(n) 复杂度内等概率返回某个方案 阅读全文
posted @ 2021-11-22 10:25 IU_UI 阅读(415) 评论(0) 推荐(0)
摘要:LeetCode刷题笔记 排序算法 稳定与不稳定 内排序和外排序 内排序:待排序的所有记录都放置在内存中。 外排序:由于记录的个数太多,不能同时放在内存中,整个排序过程需要在内外存之间多次交换数据才能进行。 //排序所有的顺序表结构 #define MAXSIZE 10000; typedef st 阅读全文
posted @ 2021-11-19 15:25 IU_UI 阅读(191) 评论(0) 推荐(0)