高频程序员高端面试题及答案.docxVIP

  • 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)

1亿VIP精品文档

相关文档