- 0
- 0
- 约5.23千字
- 约 16页
- 2026-03-09 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年美团技术面试全攻略与答案解析
一、编程基础(共5题,每题10分,总分50分)
题目1(数据结构:链表)
题目描述:
给定一个链表,判断链表中是否存在环。如果存在,返回环的入口节点;如果不存在,返回`null`。
示例输入:
-链表:`1-2-3-4-2`(形成环)
-链表:`1-2-3-4-5`(无环)
代码要求:
-使用Python或Java实现,时间复杂度O(n),空间复杂度O(1)。
-提供关键代码片段,无需完整类结构。
答案解析:
1.双指针法:
-使用快指针(每次移动两步)和慢指针(每次移动一步),如果存在环,快慢指针最终会相遇。
-相遇后,将慢指针移动到链表头部,继续每次移动一步,再次相遇的节点即为环入口。
-无环时,快指针会到达`null`。
python
defdetect_cycle(head):
slow=fast=head
whilefastandfast.next:
slow=slow.next
fast=fast.next.next
ifslow==fast:
slow=head
whileslow!=fast:
slow=slow.next
fast=fast.next
returnslow
returnNone
2.空间复杂度优化:
-哈希表法(O(n)空间)可提前判断环,但本题要求O(1)空间。
题目2(算法:二分查找)
题目描述:
给定一个旋转有序数组(例如`[4,5,6,7,0,1,2]`),查找目标值`target`,返回其索引。如果未找到,返回`-1`。
示例输入:
-数组:`[4,5,6,7,0,1,2]`,`target=0`→输出:`4`
-数组:`[1,3,5,6]`,`target=5`→输出:`2`
代码要求:
-时间复杂度O(logn),避免暴力遍历。
答案解析:
1.二分查找优化:
-每次将数组分为有序部分和无序部分,判断`target`是否在有序部分,调整搜索范围。
-具体步骤:
-设`left=0`,`right=len(nums)-1`。
-计算中点`mid`,比较`nums[mid]`与`nums[right]`:
-若`nums[mid]=nums[right]`(右侧有序):
-若`target=nums[left]`且`targetnums[mid]`,搜索左半部分;否则搜索右半部分。
-若`nums[mid]nums[right]`(左侧有序):
-若`targetnums[mid]`且`target=nums[right]`,搜索右半部分;否则搜索左半部分。
python
defsearch_rotated_array(nums,target):
left,right=0,len(nums)-1
whileleft=right:
mid=(left+right)//2
ifnums[mid]==target:
returnmid
ifnums[mid]=nums[right]:#右侧有序
ifnums[left]=targetnums[mid]:
right=mid-1
else:
left=mid+1
else:#左侧有序
ifnums[mid]target=nums[right]:
left=mid+1
else:
right=mid-1
return-1
题目3(动态规划:背包问题)
题目描述:
美团外卖需要为骑手分配订单,每个订单有重量`w`和收益`v`,背包容量为`C`,求最大总收益。
示例输入:
-订单:`[(10,60),(20,100),(30,120)]`,`C=50`→输出:`180`(选(20,100)和(30,120))
代码要求:
-动态规划解法,时间复杂度O(nC)。
答案解析:
1.01背包问题:
-定义`dp[i][j]`为前`i`件物品,容量为`j`时的最大收益。
-递推公式:
-不选第`i`件:`dp[i][j]=dp[i-1][j]`
-选第`i`件:`dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])`
-初始化:`dp[0][j]=0`,`dp[i][0]=0`。
python
defknapsack(w,v,C):
n=le
原创力文档

文档评论(0)