- 0
- 0
- 约4.67千字
- 约 16页
- 2026-01-17 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年研发工程师招聘面试题集
一、编程能力测试(共5题,每题10分,总分50分)
1.编程语言基础(10分)
题目:请用Python编写一个函数,实现将一个列表中的所有奇数移动到前面,偶数移动到后面,并保持奇数和偶数内部的原有顺序。例如,输入`[1,2,3,4,5,6]`,输出`[1,3,5,2,4,6]`。
答案:
python
defreorder_list(nums):
odd=[xforxinnumsifx%2!=0]
even=[xforxinnumsifx%2==0]
returnodd+even
解析:
-列表推导式分别提取奇数和偶数,保持原有顺序。
-最后将奇数列表和偶数列表拼接,满足题目要求。
2.数据结构与算法(10分)
题目:请用Java实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。缓存容量为3,当超出容量时,淘汰最久未使用的元素。
答案:
java
importjava.util.HashMap;
importjava.util.Map;
classLRUCacheK,V{
privatefinalintcapacity;
privatefinalMapK,Nodemap;
privateNodehead,tail;
classNode{
Kkey;
Vvalue;
Nodeprev,next;
}
publicLRUCache(intcapacity){
this.capacity=capacity;
map=newHashMap();
}
publicVget(Kkey){
Nodenode=map.get(key);
if(node==null)returnnull;
moveToHead(node);
returnnode.value;
}
publicvoidput(Kkey,Vvalue){
Nodenode=map.get(key);
if(node!=null){
node.value=value;
moveToHead(node);
}else{
if(map.size()==capacity){
map.remove(tail.key);
removeNode(tail);
}
NodenewNode=newNode();
newNode.key=key;
newNode.value=value;
addToHead(newNode);
map.put(key,newNode);
}
}
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;
}
privatevoidmoveToHead(Nodenode){
removeNode(node);
addToHead(node);
}
}
解析:
-使用双向链表+哈希表实现LRU。
-`get`操作将节点移动到头部,`put`操作先检查是否已存在,若超出容量则删除尾部节点。
3.剑指Offer算法题(10分)
题目:给定一个排序数组,请原地删除重复的元素,使得每个元素只出现一次,并返回新的长度。例如,输入`[0,0,1,1,1,2,2,3,3,4]`,返回`[0,1,2,3,4]`,新长度为5。
答案:
java
publicintremoveDuplicates(int[]nums){
if(nums.length==0)return0;
intslow=0;
for(intfast=1;fastnums.length;fast++){
if(nums[fast]!=nums[slow]){
slow++;
nums[slow]=nums[fast];
}
}
returnslow+1;
}
解析:
-双指针法,`slow`指向当前不重复的最后一个位置,`fast`遍历数组。
-当`fast`发现新元素时,更新`slow`并赋值。
4.面向对象编程(10分)
题目:请用C++实现一个`Singl
原创力文档

文档评论(0)