- 1
- 0
- 约7.25千字
- 约 23页
- 2026-02-11 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年饿了么技术支持面试常见问题及答案
一、编程基础与算法(共5题,每题6分,总分30分)
1.题目:
请实现一个函数,输入一个非负整数`n`,返回`n`的阶乘。要求使用递归和迭代两种方法实现,并比较时间复杂度。
答案:
递归方法:
java
publicstaticlongfactorialRecursive(longn){
if(n==0)return1;
returnnfactorialRecursive(n-1);
}
时间复杂度:O(n),因为每次递归调用都会进行一次乘法操作。
迭代方法:
java
publicstaticlongfactorialIterative(longn){
longresult=1;
for(longi=2;i=n;i++){
result=i;
}
returnresult;
}
时间复杂度:O(n),但常数项较低,实际执行效率可能更高。
解析:
递归方法代码简洁,但存在栈溢出风险(当`n`过大时),且重复计算较多。迭代方法更高效,适合实际业务场景。饿了么业务量大,推荐使用迭代方法。
2.题目:
编写一个函数,删除字符串中的所有重复字符,并返回新字符串。例如,输入`abaccde`,输出`acde`。
答案:
java
publicstaticStringremoveDuplicates(Strings){
char[]arr=s.toCharArray();
Arrays.sort(arr);
StringBuildersb=newStringBuilder();
for(inti=0;iarr.length;i++){
if(i==0||arr[i]!=arr[i-1]){
sb.append(arr[i]);
}
}
returnsb.toString();
}
时间复杂度:O(nlogn),因为排序操作占主导。
解析:
先排序后遍历,可以快速识别重复字符。饿了么系统对性能要求高,可进一步优化为O(n)复杂度(使用哈希集合记录已出现字符)。
3.题目:
实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。缓存容量为`capacity`,超出容量时需删除最久未使用的元素。
答案:
java
classLRUCache{
privateintcapacity;
privateMapInteger,Nodemap;
privateNodehead,tail;
classNode{
intkey,value;
Nodeprev,next;
}
publicLRUCache(intcapacity){
this.capacity=capacity;
map=newHashMap();
head=newNode();
tail=newNode();
head.next=tail;
tail.prev=head;
}
publicintget(intkey){
Nodenode=map.get(key);
if(node==null)return-1;
moveToHead(node);
returnnode.value;
}
publicvoidput(intkey,intvalue){
Nodenode=map.get(key);
if(node!=null){
node.value=value;
moveToHead(node);
}else{
NodenewNode=newNode();
newNode.key=key;
newNode.value=value;
map.put(key,newNode);
addToHead(newNode);
if(map.size()capacity){
NodetoDel=tail.prev;
map.remove(toDel.key);
removeNode(toDel);
}
}
}
privatevoidmoveToHead(Nodenode){
removeNode(node);
addToHead(node);
}
privatevoidaddToHead(Nodenode){
node.prev=head;
node.next=head.next;
head.next.prev=node;
head.next=node;
}
priv
原创力文档

文档评论(0)