- 0
- 0
- 约8.71千字
- 约 25页
- 2026-02-11 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年微软技术岗位面试技巧与答案
一、编程题(共5题,每题10分,总分50分)
1.题目(10分):
编写一个函数,实现将一个字符串中的所有大写字母转换为小写字母,所有小写字母转换为大写字母。不使用内置的`swapCase`方法,要求手动实现。
示例输入:`HelloWorld!`
示例输出:`hELLOwORLD!`
答案:
python
defswap_case(s:str)-str:
result=[]
forcharins:
ifa=char=z:
result.append(char.upper())
elifA=char=Z:
result.append(char.lower())
else:
result.append(char)
return.join(result)
测试
print(swap_case(HelloWorld!))#输出:hELLOwORLD!
解析:
-遍历字符串中的每个字符,判断其是否为小写字母(`a=char=z`)或大写字母(`A=char=Z`)。
-小写字母通过`char.upper()`转为大写,大写字母通过`char.lower()`转为小写。
-其他字符(如数字、标点符号)保持不变。
-使用列表`result`收集转换后的字符,最后用`join`拼接为字符串。
2.题目(10分):
实现一个`ListNode`类,并编写一个函数`detectCycle`,检测链表中是否存在环。如果存在,返回环的入口节点;否则返回`None`。
示例输入:
python
创建链表1-2-3-4-2(环)
classListNode:
def__init__(self,x):
self.val=x
self.next=None
defdetectCycle(head:ListNode)-ListNode:
pass
示例输出:返回节点`2`(环的入口)。
答案:
python
classListNode:
def__init__(self,x):
self.val=x
self.next=None
defdetectCycle(head:ListNode)-ListNode:
ifnotheadornothead.next:
returnNone
slow=head
fast=head
has_cycle=False
whilefastandfast.next:
slow=slow.next
fast=fast.next.next
ifslow==fast:
has_cycle=True
break
ifnothas_cycle:
returnNone
找到环的入口
slow=head
whileslow!=fast:
slow=slow.next
fast=fast.next
returnslow
解析:
-使用快慢指针(Floyd循环检测算法):
-快指针`fast`每次走两步,慢指针`slow`每次走一步。
-若存在环,快慢指针会相遇。
-相遇后,将慢指针重置为头节点,再次以相同速度移动,相遇点即为环的入口。
-若快指针到达`None`,则链表无环。
3.题目(10分):
给定一个非空数组`nums`,返回其中出现频率最高的元素。如果有多个元素频率相同,返回所有高频元素。
示例输入:`nums=[1,1,2,2,2,3]`
示例输出:`[2]`
答案:
python
deftopKFrequent(nums,k=1):
fromcollectionsimportdefaultdict
freq=defaultdict(int)
fornuminnums:
freq[num]+=1
按频率降序排序
sorted_freq=sorted(freq.items(),key=lambdax:x[1],reverse=True)
result=[]
fornum,countinsorted_freq:
iflen(result)=k:
break
result.append(num)
returnresult
测试
print(topKFrequent([1,1,2,2,2,3]))#输出:[2]
解析:
-使用`defaultdict`统计每个元素的频率。
-按频率降序排序,取前`k`个高频元素。
-若多个元素频率
原创力文档

文档评论(0)