2026年美团技术部高级工程师面试题集.docxVIP

  • 0
  • 0
  • 约5.49千字
  • 约 15页
  • 2026-01-05 发布于福建
  • 举报

2026年美团技术部高级工程师面试题集.docx

第PAGE页共NUMPAGES页

2026年美团技术部高级工程师面试题集

一、算法与数据结构(共5题,每题15分,总分75分)

1.题目:给定一个包含重复元素的数组,请找出所有不重复的三元组,使得这三个数的和等于给定的目标值。要求时间复杂度不超过O(n2)。

答案:

java

publicListListIntegerthreeSum(int[]nums,inttarget){

ListListIntegerres=newArrayList();

Arrays.sort(nums);

intn=nums.length;

for(inti=0;in-2;i++){

if(i0nums[i]==nums[i-1])continue;

intleft=i+1,right=n-1;

while(leftright){

intsum=nums[i]+nums[left]+nums[right];

if(sum==target){

res.add(Arrays.asList(nums[i],nums[left],nums[right]));

while(leftrightnums[left]==nums[left+1])left++;

while(leftrightnums[right]==nums[right-1])right--;

left++;

right--;

}elseif(sumtarget){

left++;

}else{

right--;

}

}

}

returnres;

}

2.题目:设计一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。要求get操作的时间复杂度为O(1),put操作的时间复杂度也为O(1)。

答案:

使用双向链表和哈希表的组合实现:

-哈希表记录键与链表节点的映射,实现O(1)的get操作。

-双向链表维护访问顺序,最近访问的节点在链表头部,最久未访问的节点在链表尾部。

java

classLRUCache{

classNode{

intkey,val;

Nodeprev,next;

Node(intkey,intval){this.key=key;this.val=val;}

}

MapInteger,Nodemap;

Nodehead,tail;

intcapacity;

publicLRUCache(intcapacity){

this.capacity=capacity;

map=newHashMap();

head=newNode(0,0);

tail=newNode(0,0);

head.next=tail;

tail.prev=head;

}

publicintget(intkey){

Nodenode=map.get(key);

if(node==null)return-1;

moveToHead(node);

returnnode.val;

}

publicvoidput(intkey,intvalue){

Nodenode=map.get(key);

if(node!=null){

node.val=value;

moveToHead(node);

}else{

NodenewNode=newNode(key,value);

map.put(key,newNode);

addToHead(newNode);

if(map.size()capacity){

NodetoDel=tail.prev;

removeNode(toDel);

map.remove(toDel.key);

}

}

}

privatevoidmoveToHead(Nodenode){

removeNode(node);

addToHead(node);

}

privatevoidaddToHead(Nodenode){

node.prev=head;

node.next=head.next;

head.next.prev=node;

head.next=node;

}

privatevoidremoveNode(Nodenode){

node.prev.next=node.next;

node.next.prev=node.prev;

}

}

3.题目:给定一个

文档评论(0)

1亿VIP精品文档

相关文档