随笔分类 -  LeetCode

摘要:参考链接:https://blog.csdn.net/luo1454925298/article/details/105560466 排序算法性能比较: 时间复杂度计算 递推公式法 归并排序的递推公式是: merge_sort(p…r) = merge(merge_sort(p…q), merge_ 阅读全文
posted @ 2022-01-11 21:25 RealGang 阅读(189) 评论(0) 推荐(0) 编辑
摘要:怎么知道是贪心算法 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心算法一般都是从局部最优推导出全局最优,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。 贪心一般解题步骤 贪心算法一般分为如下四步: 将问题分解为若干个子问题 找出适合的贪心策略 求解每一个子问 阅读全文
posted @ 2022-01-08 16:30 RealGang 阅读(83) 评论(0) 推荐(0) 编辑
摘要:快速幂 50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn )。 快速幂解析(分治法角度): 快速幂实际上是分治思想的一种应用。 观察发现,当 n 为奇数时,二分后会多出一项 x 。 幂结果获取: 转化为位运算: 向下整除 n // 2等价于 右移一位 n 阅读全文
posted @ 2022-01-07 19:55 RealGang 阅读(922) 评论(0) 推荐(0) 编辑
摘要:回溯算法能解决如下问题: 组合问题:N个数里面按一定规则找出k个数的集合 排列问题:N个数按一定规则全排列,有几种排列方式 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 棋盘问题:N皇后,解数独等等 如何理解回溯法 回溯法解决的问题都可以抽象为树形结 阅读全文
posted @ 2021-11-21 16:45 RealGang 阅读(98) 评论(0) 推荐(0) 编辑
摘要:LFU 算法 参考labuladong的文章 LFU 算法相当于是淘汰访问频次最低的数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。把数据按照访问频次进行排序,而且频次还会不断变化。 要求你写一个类,接受一个capacity参数,实现get和put方法: class LFUCache { / 阅读全文
posted @ 2021-07-17 11:52 RealGang 阅读(289) 评论(0) 推荐(0) 编辑
摘要:LRU缓存算法 阅读全文
posted @ 2021-07-17 10:08 RealGang 阅读(250) 评论(0) 推荐(0) 编辑
摘要:Union-Find 并查集算法 参考labuladong的文章 动态连通性其实可以抽象成给一幅图连线,如图: Union-Find 算法主要需要实现这两个 API: class UF { /* 将 p 和 q 连接 */ public void union(int p, int q); /* 判断 阅读全文
posted @ 2021-07-17 09:59 RealGang 阅读(68) 评论(0) 推荐(0) 编辑
摘要:本文会从递归反转整个单链表开始拓展 递归反转整个链表 先直接看实现代码: ListNode reverse(ListNode head) { if (head.next == null) return head; ListNode last = reverse(head.next); head.ne 阅读全文
posted @ 2021-06-17 20:30 RealGang 阅读(97) 评论(0) 推荐(0) 编辑
摘要:快速排序就是个二叉树的前序遍历,归并排序就是个二叉树的后序遍历 简单分析一下他们的算法思想和代码框架: 快速排序的逻辑是,若要对 nums[lo..hi] 进行排序,我们先找一个分界点 p,通过交换元素使得 nums[lo..p-1] 都小于等于 nums[p],且 nums[p+1..hi] 都大 阅读全文
posted @ 2021-06-17 19:33 RealGang 阅读(124) 评论(5) 推荐(1) 编辑
摘要:二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 遇到任何递归型的问题,无非就是灵魂三问: 1、这个函数是干嘛的? 情况 1,如果p和q都在以root为根的树中,函数返回的即使p和q的最近公共祖先节点。 情况 2,那如果p和q都不在以root为根的树中怎么办呢?函数理所 阅读全文
posted @ 2021-06-16 22:00 RealGang 阅读(84) 评论(0) 推荐(0) 编辑
摘要:前序遍历框架如下: void traverse(TreeNode root) { if (root == null) return; // 前序遍历的代码 traverse(root.left); traverse(root.right); } 后序遍历的代码框架: void traverse(Tr 阅读全文
posted @ 2021-06-16 15:38 RealGang 阅读(121) 评论(0) 推荐(0) 编辑
摘要:二叉搜索树的升序输出或者升序查找第k个元素之类的问题可以依靠中序遍历,BST 相关的问题,要么利用 BST 左小右大的特性提升算法效率,要么利用中序遍历的特性满足题目的要求 如果当前节点会对下面的子节点有整体影响,可以通过辅助函数增长参数列表,借助参数传递信息。 在二叉树递归框架之上,扩展出一套 B 阅读全文
posted @ 2021-06-10 20:28 RealGang 阅读(138) 评论(0) 推荐(0) 编辑
摘要:解决nSum问题 阅读全文
posted @ 2021-04-26 21:17 RealGang 阅读(150) 评论(0) 推荐(0) 编辑
摘要:LeetCode 股票买卖问题 不用递归思想进行穷举,而是利用「状态」进行穷举。我们具体到每一天,看看总共有几种可能的「状态」,再找出每个「状态」对应的「选择」。我们要穷举所有「状态」,穷举的目的是根据对应的「选择」更新状态。听起来抽象,你只要记住「状态」和「选择」两个词就行,下面实操一下就很容易明 阅读全文
posted @ 2021-04-07 21:09 RealGang 阅读(72) 评论(0) 推荐(0) 编辑
摘要:滑动窗口 滑动窗口算法框架 /* 滑动窗口算法框架 */ void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, 阅读全文
posted @ 2021-04-01 21:55 RealGang 阅读(103) 评论(0) 推荐(0) 编辑
摘要:BFS框架: // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Queue<Node> q; // 核心数据结构 Set<Node> visited; // 避免走回头路 q.offer(start); // 将起点 阅读全文
posted @ 2021-03-26 21:19 RealGang 阅读(73) 评论(0) 推荐(0) 编辑
摘要:动态规划 重叠子问题、最优子结构、状态转移方程就是动态规划三要素 思考状态转移方程: 明确 base case → 明确「状态」-> 明确「选择」 → 定义 dp 数组/函数的含义。 # 初始化 base case dp[0][0][...] = base # 进行状态转移 for 状态1 in 状 阅读全文
posted @ 2021-03-26 21:18 RealGang 阅读(131) 评论(0) 推荐(0) 编辑
摘要:思路: 解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选择列表:也就是你当前可以做的选择。 3、结束条件:也就是到达决策树底层,无法再做选择的条件。 回溯算法的框架: result = [] def backtrack(路径, 选 阅读全文
posted @ 2021-03-26 20:37 RealGang 阅读(91) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩