携程技术专员面试题及答案详解.docxVIP

  • 0
  • 0
  • 约5.14千字
  • 约 14页
  • 2026-02-09 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年携程技术专员面试题及答案详解

一、编程基础(5题,每题6分,共30分)

考察点:数据结构、算法、编程语言基础(Java/Python)

1.题目:

请实现一个函数,输入一个链表,反转链表并返回反转后的头节点。要求时间复杂度O(n),空间复杂度O(1)。

答案:

java

classListNode{

intval;

ListNodenext;

ListNode(){}

ListNode(intval){this.val=val;}

ListNode(intval,ListNodenext){this.val=val;this.next=next;}

}

publicListNodereverseList(ListNodehead){

ListNodeprev=null;

ListNodecurrent=head;

while(current!=null){

ListNodenextTemp=current.next;//保存下一个节点

current.next=prev;//反转当前节点

prev=current;//移动prev和current

current=nextTemp;

}

returnprev;//新的头节点

}

解析:

-思路:使用三指针法(prev、current、nextTemp)依次反转链表节点。

-时间复杂度:O(n),每个节点遍历一次。

-空间复杂度:O(1),仅使用常数个额外变量。

2.题目:

给定一个字符串,请判断它是否是一个有效的括号字符串(例如()[]{})。

答案:

python

defisValid(s:str)-bool:

stack=[]

mapping={(:),[:],{:}}

forcharins:

ifcharinmapping:

stack.append(char)

else:

ifnotstackormapping[stack.pop()]!=char:

returnFalse

returnnotstack

解析:

-思路:使用栈,遇到左括号入栈,遇到右括号时检查栈顶是否匹配。

-时间复杂度:O(n),每个字符遍历一次。

-空间复杂度:O(n),最坏情况下栈存储所有左括号。

3.题目:

请实现一个LRU(LeastRecentlyUsed)缓存,容量为`capacity`。支持`get(key)`和`put(key,value)`操作。

答案:

python

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.order=[]

defget(self,key:int)-int:

ifkeyinself.cache:

self.order.remove(key)

self.order.append(key)

returnself.cache[key]

return-1

defput(self,key:int,value:int)-None:

ifkeyinself.cache:

self.order.remove(key)

eliflen(self.cache)==self.capacity:

oldest=self.order.pop(0)

delself.cache[oldest]

self.cache[key]=value

self.order.append(key)

解析:

-思路:使用字典存储键值对,列表维护使用顺序。`get`时移动键到末尾,`put`时若超出容量删除最久未使用项。

-时间复杂度:O(1),列表操作可优化为双向链表实现。

4.题目:

给定一个整数数组,返回所有和为`target`的三个数的组合。

答案:

java

importjava.util.;

publicListListIntegerthreeSum(int[]nums,inttarget){

Arrays.sort(nums);

ListListIntegerres=newArrayList();

for(inti=0;inums.length-2;i++){

if(i0nums[i]==nums[i-1]

文档评论(0)

1亿VIP精品文档

相关文档