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