- 6
- 0
- 约6.69千字
- 约 17页
- 2026-04-09 发布于四川
- 举报
高频程序员高端面试题及答案
算法与数据结构类
问题1:给定一个无序整数数组,找出其中最长的连续子序列长度,要求时间复杂度O(n)。例如输入[100,4,200,1,3,2],输出4(对应序列1-2-3-4)。
解答:常规思路是排序后遍历,但排序的时间复杂度为O(nlogn),无法满足要求。O(n)解法需利用哈希表记录元素存在性,并避免重复计算。具体步骤:
1.将数组所有元素存入HashSet,用于O(1)时间查询存在性。
2.遍历数组中的每个元素num,若num-1不存在于集合中(说明num是连续序列的起点),则从num开始向后查找num+1、num+2…直到无法找到,记录当前序列长度。
3.遍历过程中维护最大长度。
关键点:仅当元素是序列起点时才进行扩展,避免重复计算。例如数组[1,2,3,4],当遍历到2时,由于1存在,不会重复计算2开始的序列。时间复杂度O(n),每个元素最多被访问两次(作为起点和被扩展时)。
问题2:实现一个LRUCache,要求get和put操作均为O(1)时间复杂度。
解答:LRU(最近最少使用)缓存的核心是维护一个双向链表记录访问顺序(最近访问的节点放在头部),以及一个哈希表快速定位节点。具体设计:
双向链表节点包含key、value、prev、next指针。
哈希表HashMapInteger,Node保
原创力文档

文档评论(0)