2026年工程师面试题集与答案详解.docxVIP

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

第PAGE页共NUMPAGES页

2026年工程师面试题集与答案详解

一、编程语言与数据结构(5题,每题10分,共50分)

1.题目(10分):

请用Python实现一个函数,输入一个整数列表,返回其中所有“快乐数”(定义:一个数各位平方和的序列最终会达到1)的所有快乐数。例如,输入`[19,2,10,1]`,输出`[1,19]`。要求解释代码逻辑并优化时间复杂度。

答案与解析:

python

defis_happy(n):

seen=set()

whilen!=1andnnotinseen:

seen.add(n)

n=sum(int(digit)2fordigitinstr(n))

returnn==1

deffind_happy_numbers(nums):

return[numfornuminnumsifis_happy(num)]

解析:

-逻辑:使用“快慢指针”思想检测循环序列,若平方和序列达到1则为快乐数。

-优化:避免重复计算,通过`seen`集合记录已访问的平方和,减少冗余运算。

-时间复杂度:O(n),n为输入列表长度。

2.题目(10分):

给定一个无重复元素的二叉树,请编写代码判断其是否为平衡二叉树(定义:任意节点的左右子树高度差不超过1)。要求提供递归解法并分析复杂度。

答案与解析:

python

classTreeNode:

def__init__(self,val=0,left=None,right=None):

self.val=val

self.left=left

self.right=right

defis_balanced(root):

defhelper(node):

ifnotnode:

return0,True

left_height,left_balanced=helper(node.left)

right_height,right_balanced=helper(node.right)

returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)=1

returnhelper(root)[1]

解析:

-逻辑:递归计算每个节点的左右子树高度,同时判断平衡性。

-复杂度:O(n),每个节点仅访问一次。

3.题目(10分):

请用C++实现一个LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作。要求使用哈希表+双向链表实现,并说明选择这种数据结构的理由。

答案与解析:

cpp

includeunordered_map

usingnamespacestd;

classLRUCache{

private:

structNode{

intkey,val;

Nodeprev;

Nodenext;

Node(intk,intv):key(k),val(v),prev(nullptr),next(nullptr){}

};

unordered_mapint,Nodecache;

Nodehead,tail;

intcapacity;

public:

LRUCache(intcapacity_):capacity(capacity_),head(newNode(0,0)),tail(newNode(0,0)){

head-next=tail;

tail-prev=head;

}

intget(intkey_){

if(cache.find(key_)==cache.end())return-1;

Nodenode=cache[key_];

moveToHead(node);

returnnode-val;

}

voidput(intkey_,intvalue_){

if(cache.find(key_)!=cache.end()){

Nodenode=cache[key_];

node-val=value_;

moveToHead(node);

}else{

Nodenode=newNode(key_,value_);

cache[key_]=node;

addToHead(node);

if(cache.size()capacity){

NodetoDel=tail-prev;

rem

文档评论(0)

1亿VIP精品文档

相关文档