LeetCode算法归类
文章平均质量分 55
分类整理leetcode算法题
Charles Ray
现就职于某半导体公司。Software Programmer
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode分类整理
滑动窗口二分查找链表双指针数组字符串哈希表动态规划数学递归深度优先搜索二叉树二叉搜索树广度优先搜索排序贪心位运算栈堆(优先队列)回溯图前缀和计数并查集分治字典树单调栈有序集合队列枚举...原创 2022-02-16 15:34:38 · 814 阅读 · 0 评论
-
leetcode算法总结 —— HOT 100分类整理
两数之和二叉树的序列化与反序列化最小栈二叉树的最大深度(后序遍历深度向上返回)原创 2021-04-01 20:20:02 · 10243 阅读 · 7 评论 -
leetcode算法总结 —— 字典树(前缀树)
概述https://leetcode-cn.com/problems/implement-trie-prefix-tree/solution/trie-tree-de-shi-xian-gua-he-chu-xue-zhe-by-huwt/关于 Trie 的应用场景,希望你能记住 8 个字:一次建树,多次查询。功能:可以在一堆字符串中,快速查询到某个字符串节点定义struct TrieNode { bool isEnd; //该结点的值,是true或者false TrieNode*原创 2021-04-10 16:59:41 · 806 阅读 · 0 评论 -
leetcode算法总结 —— dp之背包问题
文章目录背包问题问题解析二维背包转化为一维背包01背包完全背包背包问题https://leetcode-cn.com/problems/partition-equal-subset-sum/solution/bang-ni-ba-0-1bei-bao-xue-ge-tong-tou-by-px33/问题解析有N件物品和一个容量V的背包。第i件物品价值c[i]的体积是v[i]装入背包则背包可容量减小。每件物品只能用一次(可以选择放或者不放),求解将哪些物品装入背包里物品价值总和最大。则我们定义dp[原创 2021-04-07 14:51:13 · 667 阅读 · 0 评论 -
leetcode算法总结 —— 回溯
参考连接https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-python-dai-ma-java-dai-ma-by-liweiw/模版pathV可反复使用,他相当于整个遍历中的一个容器,我们前序遍历向容器中加入元素,回溯的时候后序遍历,从容器中去掉元素 void backtrack(vector<int> &nums,vector<int> &pathV)原创 2021-04-03 16:36:22 · 423 阅读 · 0 评论 -
leetcode算法总结 —— 前缀和
文章目录思路模板https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/de-liao-yi-wen-jiang-qian-zhui-he-an-pai-yhyf/图形参照上图,公式不用上面的上面的有错位。思路我们求数列的和时,Sn = a1+a2+a3+…an; 此时Sn就是数列的前 n 项和。例 S5 = a1 + a2 + a3 + a4 + a5; S2 = a1 + a2。所以我们完全可以通过 S5-S2 得到 a3原创 2021-03-23 21:05:06 · 575 阅读 · 0 评论 -
leetcode算法总结 —— BFS广度优先搜索
文章目录BFS现实转换二叉树进行BFS无向连通图有向图BFS模版 queue<TreeNode *> q; q.push(root); while (!q.empty()) //这里处理队列 { int qSize = q.size(); //循环处理该层每个节点,如果需要区分每个层则需要加该for循环 for (int i = 0; i < qSize; i++) { TreeNo原创 2021-02-25 23:22:35 · 389 阅读 · 0 评论 -
leetcode算法总结 —— 位运算
位运算利用或操作 | 和空格将英文字符转换为小写(‘a’ | ’ ') = ‘a’(‘A’ | ’ ') = ‘a’利用异或操作 ^ 和空格进行英文字符大小写互换(‘d’ ^ ’ ') = ‘D’(‘D’ ^ ’ ') = ‘d’n是十进制整数与运算a & b = n在n的二进制中:ab位都是1的时候n对应的位为1,其余的位为0n & 1 判断最后一位是0还是1,如果最后一位是1则该数为奇数,为0则该数为偶数(n & 1) == 0说明该数是偶数,(n &a原创 2021-03-28 17:01:40 · 609 阅读 · 0 评论 -
leetcode算法总结 —— 常见典型算法
典型算法洗牌算法打乱数组LRU缓存LRU 缓存机制筒子排序任务调度器计数质数计数质数接雨水接雨水 (先拿到最高点,然后左右向最高点遍历)桌游(一行代码)Nim 游戏石子游戏灯泡开关贪心什么叫贪心算法,引用很经典的一句话就是,贪心算法其实就是常识:比如说有十张钱,我们拿五张,要求和最大。那么我们肯定排序从高到低拿五张,这就是贪心。贪不贪。分发饼干list根据身高重建队原创 2021-05-24 10:37:45 · 618 阅读 · 1 评论 -
leetcode算法总结 —— DFS之网格类问题
文章目录网格类DFS1. 遍历过的岛屿需要标记2. 遍历过的岛屿需要再次使用的情况网格类DFS我把此类问题归纳为网格类的DFS,典型例题为岛屿标记,下面是该体型类模版,类似题都是根据该模版变形。模板1. 遍历过的岛屿需要标记class Solution {public: int numIslands(vector<vector<char>> &grid) { int count = 0; if (grid.size(原创 2021-02-24 20:42:33 · 688 阅读 · 0 评论 -
leetcode算法总结 ——单调栈&单调队列
文章目录栈和队列转换单调栈第一种题型第二种题型:找到一个数的左右两边的第一个比该数大(或者小)的数(边界)括号题栈和队列转换队列实现栈(一个队列)用栈实现队列 (两个队列,一个入栈,一个出栈)单调栈单调栈模板: vector<int> vRes;//记录结果 stack<int> st;//一般这里记录index //遍历数组 for(int i = 0; i < nums.size(); i++) {原创 2021-01-17 14:00:28 · 621 阅读 · 0 评论 -
leetcode算法总结 —— map存储数据
mapmap的查找时间复杂度为O(1)而数组的查找为(n),所以我们可以使用空间换时间,在一些情况中使用map来代替数组查找。使用数组下标代替map(元素有限比较少,比如字母对应索引)有效的字母异位词找不同赎金信(完全同242)拼写单词剑指 Offer 03. 数组中重复的数字两个数组的交集(两个求交集)查找常用字符(两个以上求交集)set代替map两个数组的交集快乐数宝石与石头独一无二的出现次数原创 2021-01-10 18:05:44 · 1744 阅读 · 0 评论 -
leetcode算法总结 —— 快速幂算法
文章目录1. 引出快速幂算法2. 简化语句3. 使用位运算来提升性能4. 对应leetcode题型参考的是大神的文章,这篇文章相当好https://blog.csdn.net/qq_19782019/article/details/856213861. 引出快速幂算法3 ^ 10 = 3*3*3*3*3*3*3*3*3*3计算这个我们可以循环乘3但是时间复杂度为O(N)那么我们可以用3 ^ 10 = 9 ^ 5来简化计算此时指数由10缩减一半变成了5,而底数变成了原来的平方,求3^10原本需要执原创 2020-05-29 23:11:52 · 770 阅读 · 0 评论 -
leetcode算法总结 —— DFS之BST(二叉搜索树)
文章目录二叉搜索树BSTBST搜索BST进行中序遍历BST改变结构二叉搜索树BST二叉搜索树(Binary Search Tree,简称 BST)。它的定义是:一个二叉树中,任意节点的值要大于左子树所有节点的值,且要小于右边子树的所有节点的值。二叉搜索树应用广泛,因为他的查找时间复杂度为O(logN)跟二分查找一样,接近于O(1)常数级时间复杂度,所以查找速度非常快。下面介绍BST几种典型例题。BST搜索这里就是BST的查找,我们利用的性质是:如果目标值比该节点小则,我们只需要遍历左子树,而不需原创 2021-01-02 12:37:01 · 717 阅读 · 0 评论 -
leetcode算法总结 —— 动态规划
动态规划子数组乘积最大子数组最长上升子序列(非连续子数组)最大子序和第二类:一维数组//模板一:一维数组int n = array.length;int[] dp = new int[n];for (int i = 1; i < n; i++) {//外层遍历n //内层看情况决定如何取最值 for (int j = 0; j < i; j++) { dp[i] = 最值(dp[i], dp[j] + ...)原创 2022-02-16 15:24:58 · 436 阅读 · 0 评论 -
leetcode算法总结 —— 双指针
删除重复数据(原地修改数组,使用双指针)移动零删除排序数组中的重复项移除元素汇总区间头尾双指针(向中间移动)盛最多水的容器两数之和 II - 输入有序数组(此题指明了唯一解)三数之和(167提升)最接近的三数之和反转字符串...原创 2022-02-16 15:23:24 · 427 阅读 · 0 评论 -
leetcode算法总结 —— 滑动窗口
滑动窗口注意我们的窗口是left到right的区间,我们定义的window存储该区间的值,可以存储该区间有用的值或者所有值,这个根据情况来看。window可以是数组或者map或者。。。滑动窗口算法框架int left = 0, right = 0;while (right < s.size()) { //窗口增加值 window.add(s[right]); //判断处理数据的时机,如果求最大滑窗应该放在外面。 //判断何时窗口左边界需要需收缩或滑动(重点原创 2021-01-31 20:42:13 · 559 阅读 · 0 评论 -
leetcode算法总结 —— 数组
数组数组的遍历最大连续1的个数提莫攻击三个数的最大乘积第三大的数数组的度132模式数组中重复元素的查找,(1,n)原数组标记,模板限制条件:数组中元素值不超过数组大小,这样每个元素可以对应到index原数组标记,如果某个数出现,则将该数的index上标记负号.判断当前数值对应的index上是否为负号,如果为负号说明该数值出现过寻找重复数数组中重复的数据找到所有数组中消失的数字错误的集合缺失原创 2021-12-28 14:10:02 · 3385 阅读 · 0 评论 -
leetcode算法总结 —— 二分查找
文章目录二分算法执行条件查找边界查找边界查找目标值下面我总结一个二分查找通用模版,为二分查找神器,使用该模版解决力扣上的二分查找几乎所有的问题。二分算法执行条件给定的有序数组 ,我们要遍历每个数。判断遍历的每个数是否符合给定的条件。(比如判断遍历的每个数是否等于target)这时我们就要使用二分算法。他的时间复杂度是O(logN) 要优于O(n)因为O(logN)效率几乎和O(1)相等。具体可以看我的置顶博客,时间复杂度比较图查找边界这是引出二分的原理模版,通过该模版我们可以清楚了解二分是原创 2020-12-27 21:29:52 · 420 阅读 · 0 评论 -
leetcode算法总结 —— DFS深度优先搜索
文章目录DFS自顶向下(根节点到叶子节点)(前序处理)(向下传参)同时遍历两个树自底向上(子节点到子节点) (后序处理)构建二叉树通过前/后 和中序遍历构造二叉树DFS模板 dfs(TreeNode* root, int path) { //父节点要传给子节点值,则放到递归的形参中。`void dfs(TreeNode* root, int path)` if(root == nullptr) return; //return放递归上面则会终止到当前节点,不继续向下面子树遍历,不执行原创 2021-02-03 21:24:21 · 874 阅读 · 0 评论 -
leetcode算法总结 —— 链表
文章目录链表含义进位操作删除节点合并链表快慢指针找环和中间节点模板:快指针走两步,慢指针走一步快指针先走K步然后快慢指针一起走两个指针走自己的然后走对方的,相遇即相交处反转链表k个一组反转链表链表含义注意,等号左边是指针还是指向,含义cur->next = other 表示把当前指针的下一个指向othercur = cur->next表示移动,把cur移动到cur的下一个进位操作两数相加分隔链表删除节点删除节点重点是定义一个前序节点(虚拟头节点)pre,原创 2021-01-31 20:46:06 · 728 阅读 · 0 评论 -
leetcode算法总结 —— 二叉树前、中、后序遍历(迭代和递归两种解法)
文章目录1. 递归2. 迭代,易理解解法前序中序遍历后序遍历3. 迭代统一解法模板前序遍历中序遍历后序遍历前中后序遍历递归时间和空间复杂度都是O(n)空间复杂度取决于递归的栈深度(树的高度),而栈深度在二叉树为一条链的情况下会达到 O(n) 的级别。1. 递归class Solution { public: vector<int> preorderTraversal(TreeNode *root) { vector<int> res; dfs(root,原创 2021-11-07 16:38:44 · 5265 阅读 · 1 评论
分享