- 0
- 0
- 约7.49千字
- 约 20页
- 2026-01-27 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年美团技术部面试准备攻略与答案
一、编程能力测试(5题,每题10分,共50分)
1.编写一个函数,实现快速排序算法(10分)
题目描述:
请用Python或Java实现快速排序算法,并说明其时间复杂度和空间复杂度。假设输入为一个无序的整数数组,要求输出为有序数组。
答案与解析:
Python实现:
python
defquick_sort(arr):
iflen(arr)=1:
returnarr
pivot=arr[len(arr)//2]
left=[xforxinarrifxpivot]
middle=[xforxinarrifx==pivot]
right=[xforxinarrifxpivot]
returnquick_sort(left)+middle+quick_sort(right)
时间复杂度:
-最好情况:O(nlogn),每次划分都能均匀分割数组。
-平均情况:O(nlogn),随机选择基准点可以避免最坏情况。
-最坏情况:O(n2),基准点选择最差(如已排序数组每次选择第一个或最后一个元素)。
空间复杂度:
-O(logn),递归调用栈的深度。
-如果使用原地排序(in-place),空间复杂度可优化为O(1)。
解析:
快速排序的核心是分治思想,通过选择基准点将数组划分为左、中、右三部分,然后递归排序左、右部分。时间复杂度主要取决于划分的均衡性,空间复杂度取决于递归栈的深度。美团业务场景中,快速排序常用于处理大规模数据排序,如订单按时间排序、用户按活跃度排序等。
2.实现一个LRU(最近最少使用)缓存(10分)
题目描述:
请用Python或Java实现LRU缓存,支持get和put操作。LRU缓存最多容纳固定数量的元素,当缓存满时,最久未使用的元素将被移除。
答案与解析:
Python实现(使用字典和双向链表):
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(0,0)
self.tail=ListNode(0,0)
self.head.next=self.tail
self.tail.prev=self.head
defget(self,key:int)-int:
ifkeyinself.cache:
node=self.cache[key]
self._move_to_head(node)
returnnode.value
return-1
defput(self,key:int,value:int)-None:
ifkeyinself.cache:
node=self.cache[key]
node.value=value
self._move_to_head(node)
else:
iflen(self.cache)==self.capacity:
self._remove_tail()
new_node=ListNode(key,value)
self.cache[key]=new_node
self._add_to_head(new_node)
解析:
LRU缓存的核心是高效地支持get和put操作。使用双向链表维护访问顺序,哈希表记录键值对,实现O(1)时间复杂度。
-get操作:如果键存在,将节点移动到链表头部(表示最近使用),返回值;否则返回-1。
-put操作:如果键已存在,更新值并移动到链表头部;如果键不存在,如果缓存已满,移除链表尾部节点(最久未使用),然后添加新节点到链表头部。
美团业务中,LRU缓存可用于存储热点数据,如用户画像、商品推荐等,减少数据库访问压力。
3.编写一个函数,判断一个字符串是否为回文(10分)
题目描述:
请用Python或Java实现一个函数,判断输入的字符串是否为回文。忽略大小写和非字母数字字符。
答案与解析:
Python实现:
python
defis_palindrome(s:str)-bool:
s=.join(c.lower()forcin
原创力文档

文档评论(0)