2026年技术部软件开发工程师面试题及答案.docxVIP

  • 1
  • 0
  • 约6.12千字
  • 约 14页
  • 2026-01-05 发布于福建
  • 举报

2026年技术部软件开发工程师面试题及答案.docx

第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)

1亿VIP精品文档

相关文档