人工智能算法工程师面试题详解.docxVIP

  • 0
  • 0
  • 约5.39千字
  • 约 17页
  • 2026-02-08 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年人工智能算法工程师面试题详解

一、编程能力测试(3题,每题10分,共30分)

考察目标:编程基础、代码实现能力、算法优化。

地域/行业针对性:互联网(推荐算法岗)、金融(推荐风控/量化岗)。

1.题1(10分):

题目:

给定一个链表,删除链表的倒数第n个节点,并返回新的链表头。例如,输入链表为1-2-3-4-5,n=2,删除后链表为1-2-3-5。

要求:

-不能使用额外的空间。

-时间复杂度O(N),空间复杂度O(1)。

-请用Python或C++实现。

答案与解析:

答案(Python):

python

classListNode:

def__init__(self,val=0,next=None):

self.val=val

self.next=next

defremoveNthFromEnd(head:ListNode,n:int)-ListNode:

dummy=ListNode(0)

dummy.next=head

fast=slow=dummy

快指针先走n+1步

for_inrange(n+1):

iffastisNone:

returnhead#n大于链表长度

fast=fast.next

快慢指针同时移动,当快指针到末尾时,慢指针的next就是待删除节点

whilefast:

fast=fast.next

slow=slow.next

slow.next=slow.next.next

returndummy.next

解析:

-使用双指针法,快指针先走n+1步,确保删除节点时慢指针的next指向待删除节点。

-处理边界情况:如删除头节点(n+1步后fast为None)。

-时间复杂度O(N),空间复杂度O(1)。

2.题2(10分):

题目:

实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。缓存容量为capacity,当访问一个不存在的键时返回-1,否则返回对应的值。

要求:

-get操作返回值并更新访问顺序。

-put操作插入键值对,若已存在则更新值并移动到头部。

-若超出容量,则删除最久未使用的节点。

答案与解析:

答案(Python):

python

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.head=ListNode(0)

self.tail=ListNode(0)

self.head.next=self.tail

self.tail.prev=self.head

defget(self,key:int)-int:

ifkeynotinself.cache:

return-1

node=self.cache[key]

self._move_to_head(node)

returnnode.val

defput(self,key:int,value:int)-None:

ifkeyinself.cache:

node=self.cache[key]

node.val=value

self._move_to_head(node)

else:

node=ListNode(key,value)

self.cache[key]=node

self._add_node(node)

iflen(self.cache)self.capacity:

tail=self._pop_tail()

delself.cache[tail.key]

def_move_to_head(self,node:ListNode)-None:

self._remove_node(node)

self._add_node(node)

def_add_node(self,node:ListNode)-None:

node.prev=self.head

node.next=self.head.next

self.head.next.prev=node

self.head.next=node

def_remove_node(self,node:ListNode)-None:

prev=node.prev

next=node.next

prev.next=next

next.prev=prev

def_pop_tail(self)-Li

文档评论(0)

1亿VIP精品文档

相关文档