随笔分类 -  数据结构与算法

摘要:Floyd Cycle Detection Algorithm Floyd Cycle Detection Algorithm,即 Floyd 循环检测算法,又称快慢指针法、龟兔指针法。该算法用于判断链表是否存在环,以及判断环的起点与长度的算法。 算法原理 该算法基于两个指针,从头开始遍历,一个指针 阅读全文
posted @ 2022-01-28 01:46 Acx7 阅读(313) 评论(0) 推荐(0) 编辑
摘要:差分 考虑一个问题,给出 n 个数据,每次给出一个请求(x, y, k),每次将 x 到 y 位置的数据加上 k,要求在 O(n) 的时间内解决。 暴力解法 —— O(n2),明显不行。 线段树或树状数组 —— O(qlogn),q 为请求次数。 差分 —— O(n),不辱使命。 实现方法 开一个于 阅读全文
posted @ 2021-11-27 12:10 Acx7 阅读(331) 评论(0) 推荐(0) 编辑
摘要:单调队列 单调队列,即队列中元素之间的关系具有单调性,单调递减或单调递增,队首只出队,队尾可入队、出队。 实现方法 1.使用双端队列 Deque 实现 2.使用一个数组和 front、rear 两个指针来实现 front 指针指向队首元素,rear 指针指向队尾元素,即可实现队首出队与队尾入队、出队 阅读全文
posted @ 2021-11-27 10:39 Acx7 阅读(52) 评论(0) 推荐(0) 编辑
摘要:前缀和 设 Si = A1 + A2 + ··· + Ai,其中 Si 就是叫做位置 i 的前缀和。 int[] a = new int[n]; int[] x = new int[n]; for (int i = 0; i < n; ++i) { a[i] = nextInt(); x[i] = 阅读全文
posted @ 2021-11-24 19:41 Acx7 阅读(33) 评论(0) 推荐(0) 编辑
摘要:最大子段和 最大子段和一定是每个(准)程序员都接触过的问题,题目很简洁:给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。为什么每个(准)程序员都需要掌握呢?首先这问题解法很多,时间复杂度从 O(n3) -> O(n2) -> O(nlog2n) -> O(n)。通过解决这个问 阅读全文
posted @ 2021-11-24 19:21 Acx7 阅读(50) 评论(0) 推荐(0) 编辑
摘要:二分查找 二分查找(Binary Search)又称折半查找,是一种高效率的查找方法。但是,折半查找要求线性表必须采用顺序存储结... 阅读全文
posted @ 2021-05-20 21:47 Acx7 阅读(342) 评论(0) 推荐(0) 编辑
摘要:算法简介 PageRank(网页排名),用于衡量网页的重要程度的Google专有算法。最早的搜索引擎采用的是分类目录的方法,即通... 阅读全文
posted @ 2021-05-19 23:02 Acx7 阅读(242) 评论(0) 推荐(0) 编辑
摘要:问题描述: 小艾是产自中国的一个移位寄存器,他最近很苦恼,他和他的同事吵架了,他们无法合作导致无法完成乘法操作,因为他自己只会通过移位完成乘2的乘法和除以2的除法,所以他无法完成复杂乘法。小艾的女朋友又比较笨,死活学不会乘法,小艾的女朋友不愿看他继续消沉下去,决定和小艾来一次说走就走的旅行,他们选择 阅读全文
posted @ 2021-04-09 23:37 Acx7 阅读(359) 评论(0) 推荐(1) 编辑
摘要:问题描述: 如何在O(1)时间复杂度获取栈中的最大值和最小值? 问题分析: 普通栈规定的push(入栈)、pop(出栈)、peek(查看栈顶)等操作都只能在栈顶上操作,如果栈中元素是有序的,那么我们就可以记录栈顶和栈底元素完成问题要求,但这是不可能的。普通栈不能解决问题,显然我们需要重新定义一种新的 阅读全文
posted @ 2021-04-05 13:48 Acx7 阅读(904) 评论(0) 推荐(1) 编辑

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