2026年微软件工程师面试要点与问题集.docxVIP

  • 0
  • 0
  • 约5.09千字
  • 约 15页
  • 2026-01-26 发布于福建
  • 举报

2026年微软件工程师面试要点与问题集.docx

第PAGE页共NUMPAGES页

2026年微软件工程师面试要点与问题集

一、编程基础(5题,每题10分,共50分)

考察点:数据结构、算法、编程语言基础(C++/Java/Python)

1.题目:

给定一个未排序的整数数组,返回其中第三大的数。如果数组中少于三个不同的数,则返回最大的数。

答案:

python

defthird_max(nums):

first,second,third=float(-inf),float(-inf),float(-inf)

fornuminnums:

ifnumfirst:

first,second,third=num,first,second

eliffirstnumsecond:

second,third=num,second

elifsecondnumthird:

third=num

returnthirdifthird!=float(-inf)elsefirst

解析:

-初始化三个变量存储最大、次大、第三大的数。

-遍历数组,更新三个变量。

-处理边界情况(如数组长度不足三个不同的数)。

2.题目:

实现一个LRU(LeastRecentlyUsed)缓存,支持`get`和`put`操作,容量为`capacity`。

答案:

python

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.order=[]

defget(self,key:int)-int:

ifkeyinself.cache:

self.order.remove(key)

self.order.append(key)

returnself.cache[key]

return-1

defput(self,key:int,value:int)-None:

ifkeyinself.cache:

self.order.remove(key)

eliflen(self.cache)=self.capacity:

self.cache.pop(self.order.pop(0))

self.cache[key]=value

self.order.append(key)

解析:

-使用哈希表`cache`存储键值对,列表`order`记录访问顺序。

-`get`操作将键移到末尾表示最近使用。

-`put`操作在容量满时删除最久未使用的键。

3.题目:

反转一个单链表,返回反转后的头节点。

答案:

python

classListNode:

def__init__(self,val=0,next=None):

self.val=val

self.next=next

defreverse_list(head:ListNode)-ListNode:

prev,curr=None,head

whilecurr:

next_node=curr.next

curr.next=prev

prev=curr

curr=next_node

returnprev

解析:

-使用三个指针`prev`、`curr`、`next_node`依次反转节点。

-时间复杂度O(n),空间复杂度O(1)。

4.题目:

给定一个字符串`s`,找到最长回文子串的长度。

答案:

python

deflongest_palindrome(s:str)-int:

ifnots:

return0

start,end=0,0

foriinrange(len(s)):

len1=expand_from_center(s,i,i)

len2=expand_from_center(s,i,i+1)

max_len=max(len1,len2)

ifmax_lenend-start:

start=i-(max_len-1)//2

end=i+max_len//2

returnend-start+1

defexpand_from_center(s:str,left:int,right:int)-int:

whileleft=0andrightlen(s)ands[left]==s[right]:

left-=1

right+=1

returnright-left

文档评论(0)

1亿VIP精品文档

相关文档