- 1
- 0
- 约7.66千字
- 约 22页
- 2026-01-19 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年IT技术专场—企业技术面试题详解
一、编程语言与基础算法(5题,每题10分,共50分)
1.题目:
请用Python实现一个函数,输入一个正整数n,返回其阶乘值。要求不使用递归或内置的阶乘函数,并考虑大数处理的效率问题。
2.题目:
给定一个包含重复元素的数组nums,请编写一个函数返回数组中所有唯一元素的所有子集(不包含重复的子集)。例如:输入[1,2,2],输出[[],[1],[1,2],[1,2,2],[2],[2,2]]。
3.题目:
请用Java实现快速排序算法,并说明其时间复杂度和空间复杂度。
4.题目:
设计一个LRU(LeastRecentlyUsed)缓存,容量为capacity。支持get(key)和put(key,value)操作,要求在get或put操作时,如果key存在则返回value,并更新其最近使用时间;如果不存在则返回-1,并插入新键值对。请用链表和哈希表实现。
5.题目:
请用C++实现一个函数,输入一个字符串s,判断其是否为有效的括号字符串(仅包含(、)、{、}、[、],且括号匹配正确)。要求空间复杂度尽可能低。
答案与解析
1.答案:
python
deffactorial(n):
ifn==0:
return1
result=1
foriinrange(1,n+1):
result=i
returnresult
解析:
-使用循环替代递归避免栈溢出,适合大数计算。
-高效处理大数时,可考虑使用`d`(Python3.8+)或第三方库`d`。
2.答案:
python
defsubsetsWithDup(nums):
nums.sort()#先排序去重
res=[]
subset=[]
defbacktrack(start):
res.append(subset.copy())
foriinrange(start,len(nums)):
ifistartandnums[i]==nums[i-1]:
continue#跳过重复元素
subset.append(nums[i])
backtrack(i+1)
subset.pop()
backtrack(0)
returnres
解析:
-排序后通过剪枝避免重复子集。
-回溯算法的核心是`start`指针控制重复元素不重复选择。
3.答案:
java
publicclassQuickSort{
publicvoidquickSort(int[]arr,intleft,intright){
if(left=right)return;
intpivot=partition(arr,left,right);
quickSort(arr,left,pivot-1);
quickSort(arr,pivot+1,right);
}
privateintpartition(int[]arr,intleft,intright){
intpivot=arr[right];
inti=left-1;
for(intj=left;jright;j++){
if(arr[j]=pivot){
i++;
swap(arr,i,j);
}
}
swap(arr,i+1,right);
returni+1;
}
privatevoidswap(int[]arr,inti,intj){
inttemp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
解析:
-时间复杂度O(nlogn),空间复杂度O(logn)(递归栈)。
-改进点:三数取中法选pivot可优化性能。
4.答案:
python
classLRUCache:
def__init__(self,capacity:int):
self.capacity=capacity
self.cache={}
self.head,self.tail=Node(0,0),Node(0,0)
self.head.next=self.tail
self.tail.prev=self.head
classNode:
def__init__(self,key,value):
self.key=key
self.value=value
self.prev,self.next=None,None
defge
原创力文档

文档评论(0)