微软件开发工程师面试题及答案.docxVIP

  • 1
  • 0
  • 约7.62千字
  • 约 24页
  • 2026-02-09 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年微软件开发工程师面试题及答案

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

1.题目:

请用Java实现一个方法,输入一个整数数组,返回数组中所有奇数元素的平方和。要求时间复杂度为O(n)。

答案:

java

publicclassMain{

publicstaticintsumOfOddSquares(int[]arr){

intsum=0;

for(intnum:arr){

if(num%2!=0){

sum+=numnum;

}

}

returnsum;

}

publicstaticvoidmain(String[]args){

int[]arr={1,2,3,4,5};

System.out.println(sumOfOddSquares(arr));//输出:35(1^2+3^2+5^2=1+9+25=35)

}

}

解析:

方法通过遍历数组,检查每个元素是否为奇数,如果是则计算其平方并累加。时间复杂度为O(n),空间复杂度为O(1)。

2.题目:

请用Python实现一个函数,输入一个字符串,返回该字符串中所有单词的长度之和。假设单词之间由空格分隔。

答案:

python

defsum_of_word_lengths(s):

words=s.split()

returnsum(len(word)forwordinwords)

示例

print(sum_of_word_lengths(HelloworldfromChina))#输出:21(5+5+5+6)

解析:

函数通过`split()`分割字符串为单词列表,然后计算每个单词的长度并求和。

3.题目:

请用C++实现一个函数,输入一个链表节点,返回该链表的倒数第k个节点。假设链表不为空且k有效。

答案:

cpp

includeiostream

structListNode{

intval;

ListNodenext;

ListNode(intx):val(x),next(nullptr){}

};

ListNodegetKthFromEnd(ListNodehead,intk){

ListNodefast=head;

ListNodeslow=head;

//快指针先走k步

for(inti=0;ik;++i){

if(fast==nullptr)returnnullptr;

fast=fast-next;

}

//快慢指针同时走

while(fast!=nullptr){

fast=fast-next;

slow=slow-next;

}

returnslow;

}

//示例

intmain(){

ListNodehead=newListNode(1);

head-next=newListNode(2);

head-next-next=newListNode(3);

head-next-next-next=newListNode(4);

ListNodenode=getKthFromEnd(head,2);//返回值为3

std::coutnode-valstd::endl;//输出:3

return0;

}

解析:

使用双指针法,快指针先走k步,然后慢指针和快指针同时走,当快指针到达末尾时,慢指针即为倒数第k个节点。

4.题目:

请用JavaScript实现一个函数,输入一个对象,返回该对象所有键值对的总和(仅计算数值类型的值)。

答案:

javascript

functionsumObjectValues(obj){

returnObject.values(obj).reduce((sum,val)={

returntypeofval===number?sum+val:sum;

},0);

}

//示例

constobj={a:10,b:20,c:hello};

console.log(sumObjectValues(obj));//输出:30

解析:

通过`Object.values()`获取对象的所有值,然后使用`reduce`累加数值类型的值。

5.题目:

请用Go实现一个函数,输入一个字符串,返回该字符串的子串数量(不含空字符串)。

答案:

go

packagemain

import(

fmt

)

funccountSu

文档评论(0)

1亿VIP精品文档

相关文档