- 1
- 0
- 约6.12千字
- 约 14页
- 2026-01-05 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年技术部软件开发工程师面试题及答案
一、编程题(共3题,每题20分,总分60分)
1.题目(20分):
编写一个函数,实现将一个字符串中的所有单词顺序颠倒,但每个单词内部的字符顺序保持不变。例如,输入`helloworld`,输出`worldhello`。要求不使用额外的字符串或列表存储,尽可能优化时间复杂度。
答案:
python
defreverse_words(s:str)-str:
ifnots:
return
将字符串按空格分割成单词列表
words=s.split()
反转整个单词列表
words.reverse()
将反转后的单词列表合并成字符串
return.join(words)
示例测试
print(reverse_words(helloworld))#输出:worldhello
解析:
-首先检查输入字符串是否为空,若为空则直接返回空字符串。
-使用`split()`方法按空格分割字符串,得到单词列表。
-使用`reverse()`方法反转列表中的元素顺序。
-最后使用`join()`方法将反转后的单词列表合并成字符串并返回。
-时间复杂度:`O(n)`,其中`n`为字符串的长度,因为`split()`、`reverse()`和`join()`的操作均为线性时间。
2.题目(20分):
设计一个简单的LRU(LeastRecentlyUsed)缓存机制,使用Python实现。要求支持`get(key)`和`put(key,value)`操作,当缓存容量满时,需要淘汰最久未使用的元素。
答案:
python
fromcollectionsimportOrderedDict
classLRUCache:
def__init__(self,capacity:int):
self.cache=OrderedDict()
self.capacity=capacity
defget(self,key:int)-int:
ifkeynotinself.cache:
return-1
将访问的元素移动到字典末尾,表示最近使用
self.cache.move_to_end(key)
returnself.cache[key]
defput(self,key:int,value:int)-None:
ifkeyinself.cache:
更新值并移动到末尾
self.cache[key]=value
self.cache.move_to_end(key)
else:
如果缓存已满,删除最早的元素
iflen(self.cache)=self.capacity:
self.cache.popitem(last=False)
self.cache[key]=value
示例测试
cache=LRUCache(2)
cache.put(1,1)
cache.put(2,2)
print(cache.get(1))#返回1
cache.put(3,3)#去除键2
print(cache.get(2))#返回-1
解析:
-使用`OrderedDict`维护元素的顺序,`move_to_end()`方法可以将访问的元素移动到末尾,表示最近使用。
-`get(key)`操作:若`key`存在,则将其移动到末尾并返回值;若不存在,返回`-1`。
-`put(key,value)`操作:若`key`存在,则更新值并移动到末尾;若不存在,且缓存已满,则删除最早的元素(`popitem(last=False)`),然后插入新元素。
-时间复杂度:`O(1)`,因为`OrderedDict`的`get()`、`put()`和`move_to_end()`操作均为常数时间。
3.题目(20分):
编写一个函数,判断一个整数是否为“快乐数”(HappyNumber)。快乐数的定义:对于一个正整数,将该数的每个数字的平方和计算出来,重复此过程,若最终结果为`1`,则为快乐数。例如,`19`是快乐数,因为`12+92=82`,`82+22=68`,`62+82=100`,`12+02+02=1`。
答案:
python
defis_happy(n:int)-bool:
seen=set()
whilen!=1andnnotinseen:
seen.add(n)
n=sum
原创力文档

文档评论(0)