假定你有一点算法数据结构知识
如果没有的话,所有提到的内容请自行查找,
不推荐提问.
最后偶会说说为什么写这些东西,
为什么选择这些而没有选择另一些.
1 链表找环(探测环形链表) O(n)
A 拓扑排序,删0入度点
B DFS(经过一个点就标记,标记2次的即可判定为环)
2 半素数
(只要一个数能被分解成两个素数,那么这个数就是半素数)
注意时间空间的平衡.
输入N (2<=N<=1000000),输出Y或者N,每行一个,遇0结束
这里只讨论探查找第一个质因数的问题.
A 从 2 到 ceil(sqrt(N)) 取余数探查
B 筛质数,2-1000中的质数进行筛选 (因为对最大的N,ceil(sqrt(N))=1000)
C 小素数筛选,大素数使用 Miller-Rabin 测试
3 LCA(最近公共祖先,Least Common Ancestors) 和 RMQ(Range Minimum/Maximum
Query)
先说 RMQ,再说 LCA.
RMQ有n多种方法.
本部分复杂度记法:O(预处理时间)-O(查询时间)
朴素(或许可以称作暴力)DP:
造表,O(n^2)-O(1)
分块,每块大小sqrt(N),总块数sqrt(N),
O(n)-O(sqrt(N))
第一次查询本块,第2次查询所有块的最小值
稀疏表(ST,Sparse Table),存储(i,i+2^j)中的最小值(1<=logn)
O(nlogn)-O(1)
(但是很多人懒的把它写好,所以查询成了O(logn)
存储的是下标,不是数)
类线段树,O(n)-O(logn)
LCA->RMQ: O(n)
深度优先遍历,记录节点深度D[i] 和节点第一次出现的位置(在数组中,R[i])
LCA(i,j)=RMQ(R[i],R[j]) (i<j )
因为每边来回各一次,所以数列中总共 2n-1 项.
相邻两项中相差1(遍历总不能跳着来吧),这样的RMQ也叫+/-1RMQ
RMQ->LCA: O(n)
笛卡尔树(Cartesian Tree),构造时间O(n),具体略
+/-1 RMQ有O(n)-O(1)的算法
将数列分成(2log2n)段,每段长(log2n/2).
用上面提到的稀疏表(ST)方法,
可以在O(N)的时间内完成所有小块的预处理
为什么是O(N)? O(n/(log2n/2) * log2(N/log2n*2) )=O(n)
后面对RMQ的预处理仍然是O(n),具体内容自己查找.
查询是O(1)的,相当的快.
回到正题.
对一般的RMQ进行如下处理
RMQ->LCA->(+/-1)RMQ
都可以达到O(n)-O(1)
另外,LCA还有利用并查集的Tarjan算法,
代码简单,但可惜的是它是离线算法.
====
ps: 没事的同学,看不明白的同学欢迎跳走…
ps2:算法导论第二版偶已经看完了,
如果不考虑证明问题的话,
掌握85%应该是可以达到的
ps3:看了好多关于C函数的面试问题,
这些东西只不过是让你注意一下边界处理问题
(当然偶并不否认它不重要)
很多情况下重做这些东西确实等于重造轮子
ps4:看算法导论不一定就等于会了,欢迎找个Online judge做做题
ps5:写这些东西或许就是来充技术文章的数的?
ps6:这里不是CSDN,写了好文章不会有人推你上首页.
废话了这么多,赶紧结束.
相关推荐
"算法大全-面试题-链表-栈-二叉树-数据结构"这个压缩包文件提供了丰富的知识资源,旨在帮助学习者深入理解和应用这些核心概念。 链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。链表由一...
在面试中,数据结构和算法的考察占据着重要地位,因为它们是软件开发和计算机科学中不可或缺的基础。 单链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。在面试中...
《程序员代码面试指南:IT名企算法与数据结构题目最优解-代码》是一部专为准备IT企业面试的程序员量身定制的指南。本书的核心内容围绕算法和数据结构展开,通过Java语言实现,旨在帮助读者掌握解决常见面试问题的...
本资料集“数据结构面试大全”显然是为准备面试者提供了一个全面的资源库,包含了各种知名企业的真实面试题目,以及数据结构的基础知识。 1. **数组**:是最基本的数据结构,提供了随机访问元素的能力。面试中可能...
根据提供的文档内容,我们可以归纳出一系列关于数据结构与算法的重要知识点。下面将详细解析文档中提及的每一个问题或概念,并尽量扩展相关内容。 ### 一、数据结构基础 #### 1. 字符串处理 - **旋转词判断**: ...
这本书主要聚焦于算法和数据结构,旨在帮助读者掌握在面试中常见的问题,并提供最优解。"左神"作为标签,暗示了这本书的作者或者内容在编程界具有较高的权威性和影响力,"左神"通常是对在编程领域有深厚造诣的人的一...
本资料包“算法数据结构常见面试题”是为准备面试的程序员精心准备的,涵盖了这一领域的核心知识点,旨在帮助你提升面试成功率。 数据结构是计算机科学中用于组织和存储数据的一种方式,它关系到数据的逻辑结构、...
1. 数据结构与算法面试准备:文章提到的是微软和百度的面试题,这提示我们对于准备面试,特别是那些知名的科技公司,需要对数据结构和算法有深入的了解和准备。这包括但不限于对二元查找树、双向链表等基本数据结构...
通过对这些源代码的阅读和分析,可以提升对数据结构和算法的理解,提高编程能力,对于准备面试或者实际项目开发都有很大帮助。在学习过程中,读者应结合理论与实践,逐步掌握这些核心概念,并能够灵活运用到具体问题...
数据结构和算法是计算机科学的基础,对于面试来说,掌握这些知识是至关重要的,尤其是在像微软这样的顶级科技公司。以下是对给定题目的一些详细解析: 1. **二元查找树转双向链表**: - 二元查找树(BST)是一种自...
数据结构和算法是计算机科学的基础,对于理解和设计高效的软件至关重要。C++作为一种强大的编程语言,因其面向对象的特性,常被用于实现复杂的数据结构和算法。《数据结构算法与应用-C++语言描述》这本书,由Sahni著...
这个“数据结构与算法-----PPT版本”很可能包含了徐旭松教授或专家精心制作的一系列教学材料,旨在帮助学习者深入理解这些核心概念。 数据结构是关于如何在计算机中组织和存储数据的方式,它直接影响到程序的效率和...
在准备面试,特别是针对微软这样的顶级科技公司的面试时,数据结构和算法是不可或缺的重要部分。这份资源"面试前必备(微软数据结构+算法)"包含了针对这类面试的100道题目,旨在帮助求职者全面了解和掌握相关知识。...
程序员代码面试指南--IT名企算法与数据结构题目最优解下载 左程云 程序员代码面试指南--IT名企算法与数据结构题目最优解下载 左程云 程序员代码面试指南--IT名企算法与数据结构题目最优解下载 左程云
《程序员代码面试指南-算法与数据结构代码》是一本针对准备技术面试,特别是涉及算法和数据结构问题的程序员的重要资源。书中的源代码涵盖了多种编程语言,如Java、C++或Python,旨在帮助读者理解并解决常见的面试...
《程序员面试代码指南——IT名企算法与数据结构题目最优解》、个人面试算法练习
《算法、数据结构和编程面试Java实战指南》 在当今的IT行业中,算法、数据结构以及编程能力是衡量一个程序员专业水平的重要标准,特别是在求职面试中,这些技能的掌握程度往往直接影响到面试的成功与否。本资源包...
在Java面试中,数据结构与算法是至关重要的考察点,它们是解决问题的基础工具,能够有效提升程序的效率和可维护性。以下将详细介绍标题和描述中提到的一些关键知识点。 1. **数组**:数组是最基本的数据结构,它在...