百度算法工程师面试题解析.docxVIP

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

第PAGE页共NUMPAGES页

2026年百度算法工程师面试题解析

一、编程基础(4题,每题25分,共100分)

1.题目:

实现一个函数,输入一个正整数n,返回一个长度为n的数组,数组中的每个元素都是唯一的,且范围在[1,n]之间,不使用额外的存储空间。

示例:

输入:3

输出:[1,2,3]

解析:

要求不使用额外存储空间,意味着不能使用哈希表或数组等额外数据结构。可以通过数学公式或位运算解决,但最直观的方法是交换数字。

答案:

python

defswap_numbers(nums,i,j):

nums[i]^=nums[j]

nums[j]^=nums[i]

nums[i]^=nums[j]

defunique_numbers(n):

nums=list(range(1,n+1))

foriinrange(n):

ifnums[i]=n:

swap_numbers(nums,i,nums[i]-1)

returnnums

2.题目:

给定一个字符串s,找到其中不重复的最长子串的长度。

示例:

输入:abcabcbb

输出:3(abc)

解析:

可以使用滑动窗口的方法,通过双指针维护一个窗口,记录字符出现的位置,避免重复。

答案:

python

deflength_of_longest_substring(s):

char_set=set()

left=0

max_len=0

forrightinrange(len(s)):

whiles[right]inchar_set:

char_set.remove(s[left])

left+=1

char_set.add(s[right])

max_len=max(max_len,right-left+1)

returnmax_len

3.题目:

实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。

示例:

python

LRUCache=LRUCache(2)

LRUCache.put(1,1)

LRUCache.put(2,2)

LRUCache.get(1)#返回1

LRUCache.put(3,3)#去除键2

LRUCache.get(2)#返回-1(未找到)

LRUCache.put(4,4)#去除键1

LRUCache.get(1)#返回-1(未找到)

LRUCache.get(3)#返回3

LRUCache.get(4)#返回4

解析:

LRU缓存需要快速访问和删除最久未使用的元素。可以使用双向链表结合哈希表实现。

答案:

python

classListNode:

def__init__(self,key=0,value=0):

self.key=key

self.value=value

self.prev=None

self.next=None

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.head=ListNode()

self.tail=ListNode()

self.head.next=self.tail

self.tail.prev=self.head

def_add_node(self,node):

node.prev=self.head

node.next=self.head.next

self.head.next.prev=node

self.head.next=node

def_remove_node(self,node):

prev_node=node.prev

next_node=node.next

prev_node.next=next_node

next_node.prev=prev_node

def_move_to_head(self,node):

self._remove_node(node)

self._add_node(node)

def_pop_tail(self):

res=self.tail.prev

self._remove_node(res)

returnres

defget(self,key:int)-int:

node=self.cache.get(key,None)

ifno

文档评论(0)

1亿VIP精品文档

相关文档