随笔分类 -  刷Leetcode

摘要:基本概念: 队列是一种特殊的线性表。以一个普通的单端队列为例,只允许在表的前端进行删除操作,而在表的后端进行插入操作。队列的入和出与元素(数据)进的次序有关,只有最早进入队列的元素才能最先从队列中删除,所以队列又被称为先进先出(FIFO—first in first out)线性表。 优先队列和队列 阅读全文
posted @ 2022-02-21 22:45 nxf_rabbit75 阅读(717) 评论(0) 推荐(0) 编辑
摘要:一、基本概念 栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。 单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)。 听起来有点像堆(heap)?不是的,单调栈用途不太广泛,只处理一种典型的 阅读全文
posted @ 2022-02-15 09:05 nxf_rabbit75 阅读(385) 评论(0) 推荐(0) 编辑
摘要:一、基本概念 前缀和指一个数组的某下标之前的所有数组元素的和(包含其自身),前缀和是一种重要的预处理,能够降低算法的时间复杂度。 preSum是前缀和数组, nums是内容数组。 拥有前缀和数组后, 我们可以在O(1)的时间复杂度内求出区间和。 使用场景: 前缀和计算通常作为某种计算的预处理过程,作 阅读全文
posted @ 2022-02-13 16:22 nxf_rabbit75 阅读(1145) 评论(0) 推荐(0) 编辑
摘要:xx 阅读全文
posted @ 2022-01-23 23:26 nxf_rabbit75 阅读(50) 评论(0) 推荐(0) 编辑
摘要:滑动窗口算法框架 点击查看代码 void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, right = 0; i 阅读全文
posted @ 2022-01-16 14:39 nxf_rabbit75 阅读(88) 评论(0) 推荐(0) 编辑
摘要:基本概念: 二分法属于编程五大常用算法(分治、贪心、回溯、分支定界和动态规划)中的分治算法。分治算法的思想就是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同,求出子问题的解,就可得到原问题的解。二分法由于其划分的简单和均匀的特点,是分治求解时经常采用的一种有效的 阅读全文
posted @ 2022-01-16 12:41 nxf_rabbit75 阅读(286) 评论(0) 推荐(0) 编辑
摘要:一、快慢指针 1.判定链表中是否含有环 经典解法就是用两个指针,一个跑得快,一个跑得慢。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。 boolean hasCycle(ListNode head) { Lis 阅读全文
posted @ 2022-01-15 14:46 nxf_rabbit75 阅读(91) 评论(0) 推荐(0) 编辑
摘要:BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度可能比 DFS 大很多。 BFS框架: // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Queue<Node> q; // 阅读全文
posted @ 2022-01-15 13:48 nxf_rabbit75 阅读(150) 评论(0) 推荐(0) 编辑
摘要:♥ ♥ ♥回溯算法其实就是DFS算法,本质上就是一种暴力穷举算法。 解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考3个问题: 路径:也就是已经做出的选择。 选择列表:也就是你当前可以做的选择。 结束条件:也就是到达决策树底层,无法再做选择的条件。 代码方面,回溯算法的框架: resu 阅读全文
posted @ 2022-01-15 11:08 nxf_rabbit75 阅读(34) 评论(0) 推荐(0) 编辑
摘要:♥♥♥二叉树题目的递归解法可以分两类思路: 第一类是遍历一遍二叉树得出答案(回溯算法核心框架) 第二类是通过分解问题计算出答案(动态规划核心框架) 遇到一道二叉树的题目时的通用思考过程是: 是否可以通过遍历一遍二叉树得到答案?如果不能的话,是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问 阅读全文
posted @ 2022-01-15 11:06 nxf_rabbit75 阅读(61) 评论(0) 推荐(0) 编辑
摘要:1.数组 初始化: int m=5,n=10; // 初始化一个大小为10的int数组,其中的值默认初始化为0 int[] nums = new int[n]; // 初始化一个m*n的二维布尔数组 // 其中的元素默认初始化为false boolean[][] visited = new bool 阅读全文
posted @ 2022-01-15 11:04 nxf_rabbit75 阅读(40) 评论(0) 推荐(0) 编辑
摘要:1.LeetCode 1114 按序打印 题目:设计修改程序,以确保 two() 方法在 one() 方法之后被执行,three() 方法在 two() 方法之后被执行。 方法1: 用两个boolean变量flag1和flag2控制,当第一个线程结束,flag1=true; 线程2只有当flag1= 阅读全文
posted @ 2020-06-09 23:19 nxf_rabbit75 阅读(519) 评论(0) 推荐(0) 编辑
摘要:1.随机打乱数组(洗牌算法) 分析洗牌算法正确性的准则:产生的结果必须有 n! 种可能,否则就是错误的。这个很好解释,因为一个长度为 n 的数组的全排列就有 n! 种,也就是说打乱结果总共有 n! 种。算法必须能够反映这个事实,才是正确的。 代码: 2.蓄水池算法 应用场景: 长度未知的海量数据流中 阅读全文
posted @ 2019-09-18 20:59 nxf_rabbit75 阅读(1256) 评论(0) 推荐(0) 编辑
摘要:约瑟夫环 1. 报数,删除报到k的人,直到只剩下一个人 题目:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常,我们会要求输出最后一位出列的 阅读全文
posted @ 2019-04-14 22:47 nxf_rabbit75 阅读(6199) 评论(1) 推荐(4) 编辑
摘要:这类题目,首先需要确定可用内存的大小,然后确定数据的大小,由这两个参数就可以确定hash函数应该怎么设置才能保证每个文件的大小都不超过内存的大小,从而可以保证每个小的文件都能被一次性加载到内存中。 1. 如何从大量的url中找到相同的url? 题目描述:给定a、b两个文件,各存放50亿个url,每个 阅读全文
posted @ 2019-03-19 15:12 nxf_rabbit75 阅读(1489) 评论(0) 推荐(0) 编辑
摘要:有段话来理解递归,感觉不错: 你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把 阅读全文
posted @ 2018-12-18 18:08 nxf_rabbit75 阅读(272) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示