电信公司技术部工程师面试问题及答案.docxVIP

  • 0
  • 0
  • 约6.23千字
  • 约 18页
  • 2026-02-02 发布于福建
  • 举报

电信公司技术部工程师面试问题及答案.docx

第PAGE页共NUMPAGES页

2026年电信公司技术部工程师面试问题及答案

一、编程语言与数据结构(共5题,每题8分,总分40分)

1.题目:

请用Python实现一个函数,输入一个字符串,返回该字符串中所有唯一字符的列表(字符不区分大小写)。例如,输入Telecom2026,输出[T,e,l,c,o,m,2,6]。

答案:

python

defunique_chars(s):

lower_s=s.lower()

unique=[]

forcharinlower_s:

iflower_s.count(char)==1:

unique.append(char)

returnunique

测试

print(unique_chars(Telecom2026))#输出:[T,e,l,c,o,m,2,6]

解析:

-首先将字符串转为小写统一处理,避免大小写重复。

-使用`count`方法统计每个字符出现的次数,仅保留出现一次的字符。

-时间复杂度为O(n2),对于短字符串足够,但可优化为O(n)。

优化版(O(n)):

python

fromcollectionsimportCounter

defunique_chars_optimized(s):

counter=Counter(s.lower())

return[charforchar,cntincounter.items()ifcnt==1]

print(unique_chars_optimized(Telecom2026))#输出:[T,e,l,c,o,m,2,6]

2.题目:

请解释快速排序(QuickSort)的原理,并说明其时间复杂度在不同情况下的表现。

答案:

快速排序是分治算法的经典实现,步骤如下:

1.选择一个基准值(pivot),通常选取第一个或最后一个元素。

2.将数组分为两部分:左边的元素均小于基准值,右边的元素均大于基准值(分区操作)。

3.递归对左右两部分重复上述步骤,直到数组有序。

时间复杂度:

-最好/平均:O(nlogn),每次分区均匀分割数组。

-最坏:O(n2),当基准值选择不当(如已排序数组每次取两端),分区不均匀。

优化:

-随机选择基准值以避免最坏情况。

-尾递归优化减少栈深度。

3.题目:

请用C++实现二叉树的中序遍历(非递归版本),并说明原理。

答案:

cpp

includevector

includestack

structTreeNode{

intval;

TreeNodeleft,right;

TreeNode(intx):val(x),left(nullptr),right(nullptr){}

};

vectorintinorderTraversal(TreeNoderoot){

vectorintres;

stackTreeNodest;

TreeNodenode=root;

while(node!=nullptr||!st.empty()){

while(node!=nullptr){

st.push(node);

node=node-left;

}

node=st.top();st.pop();

res.push_back(node-val);

node=node-right;

}

returnres;

}

解析:

-使用栈模拟递归,避免重复递归调用。

-先遍历左子树,再访问节点,最后遍历右子树。

-时间/空间复杂度:O(n)。

4.题目:

请解释哈希表的冲突解决方法,并比较链地址法和开放地址法的优缺点。

答案:

冲突解决方法:

1.链地址法:相同哈希值的关键字存储在同一个链表中。

-优点:实现简单,可动态扩容。

-缺点:链表长时查询效率下降。

2.开放地址法:若发生冲突,线性探测(顺序查找下一个空槽)或二次探测。

-优点:空间利用率高。

-缺点:易产生聚集,影响性能。

比较:

|方法|查询效率|扩容成本|适用场景|

||-|-||

|链地址法|较高|较高|高冲突场景|

|开放地址法|较低(聚集时)|较低|低冲突场景|

5.题目:

请用Java实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作(容量为3)。

答案:

java

importjava.util.HashMap;

importjava.

文档评论(0)

1亿VIP精品文档

相关文档