高频编程基本知识面试题及答案.docxVIP

  • 2
  • 0
  • 约1.13万字
  • 约 28页
  • 2026-03-09 发布于四川
  • 举报

高频编程基本知识面试题及答案

1.数组和链表的本质区别是什么?在哪些场景下优先选择链表?

数组是连续内存空间存储相同类型元素的结构,通过下标直接计算内存地址实现O(1)时间复杂度的随机访问;链表通过节点间指针连接存储元素,内存空间不连续,访问第k个元素需遍历前k-1个节点,时间复杂度O(n)。

链表的优势体现在频繁插入/删除操作场景(如中间位置插入,链表只需调整相邻节点指针,时间复杂度O(1);数组需移动后续元素,时间复杂度O(n)),或元素数量动态变化且难以提前分配固定大小内存时(数组需预分配空间,可能造成内存浪费或扩容开销)。例如,实现LRU缓存时,链表配合哈希表可高效完成节点移动;而需要频繁随机访问的场景(如矩阵运算)则更适合数组。

2.哈希表如何解决哈希冲突?常见方法的优缺点对比。

哈希冲突指不同键值对通过哈希函数映射到同一槽位的情况。解决方法主要有链地址法(开链法)和开放寻址法(闭散列)。

链地址法:每个槽位存储一个链表(或红黑树),冲突元素作为链表节点挂在对应槽位下。Java的HashMap在JDK8前使用链表,当链表长度超过8且容量≥64时转为红黑树(时间复杂度从O(n)优化到O(logn))。优点是实现简单,对哈希函数要求低,适合冲突频繁场景;缺点是链表/树节点需额外存储指针,空间开销大,遍历链表影响性能。

开放寻址法:冲突时通过探测函数(线性

文档评论(0)

1亿VIP精品文档

相关文档