微软技术岗位面试技巧与答案.docxVIP

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

1亿VIP精品文档

相关文档