淘宝工程师面试题及答案.docxVIP

  • 0
  • 0
  • 约6.78千字
  • 约 18页
  • 2026-02-05 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年淘宝工程师面试题及答案

一、编程题(共3题,每题20分)

题目1(20分)

问题描述:实现一个函数,输入一个整数数组,返回数组中所有奇数数字的平方和。例如,输入[1,2,3,4,5],返回1^2+3^2+5^2=35。

要求:

1.时间复杂度不超过O(n)

2.不使用额外的存储空间

3.考虑大数据量输入的情况

参考代码(Python):

python

defsum_of_odd_squares(nums):

result=0

fornuminnums:

ifnum%2!=0:

result+=numnum

returnresult

测试用例

print(sum_of_odd_squares([1,2,3,4,5]))#输出35

print(sum_of_odd_squares([0,-1,-2,3,4]))#输出10

答案解析:

1.算法思路:遍历数组,判断每个元素是否为奇数,如果是则计算其平方并累加到结果中。

2.时间复杂度分析:只需要遍历数组一次,因此时间复杂度为O(n)。

3.空间复杂度分析:只使用了常数个额外变量,空间复杂度为O(1)。

4.大数据量考虑:对于大数据量输入,该算法仍然适用,但需要注意Python的整数类型可以处理大数计算。

题目2(20分)

问题描述:给定一个字符串,找出其中最长的回文子串的长度。例如,输入babad,返回3(bab或aba)。

要求:

1.不能使用额外的存储空间

2.考虑字符串长度可能非常大(如10000个字符)

参考代码(Java):

java

publicclassLongestPalindrome{

publicstaticintlongestPalindrome(Strings){

if(s==null||s.length()1)return0;

intstart=0,end=0;

for(inti=0;is.length();i++){

intlen1=expandAroundCenter(s,i,i);

intlen2=expandAroundCenter(s,i,i+1);

intlen=Math.max(len1,len2);

if(lenend-start){

start=i-(len-1)/2;

end=i+len/2;

}

}

returnend-start+1;

}

privatestaticintexpandAroundCenter(Strings,intleft,intright){

while(left=0rights.length()s.charAt(left)==s.charAt(right)){

left--;

right++;

}

returnright-left-1;

}

publicstaticvoidmain(String[]args){

System.out.println(longestPalindrome(babad));//输出3

System.out.println(longestPalindrome(cbbd));//输出2

}

}

答案解析:

1.算法思路:使用中心扩展法,对于每个字符(或字符对)作为中心,向两边扩展,找出最长的回文子串。

2.时间复杂度分析:每个中心最多扩展n次,共有2n个中心,因此时间复杂度为O(n^2)。

3.空间复杂度分析:只使用了常数个额外变量,空间复杂度为O(1)。

4.大数据量考虑:对于非常大的字符串,O(n^2)的时间复杂度可能不够高效。可以考虑Manacher算法,将时间复杂度优化到O(n)。

题目3(20分)

问题描述:实现一个LRU(LeastRecentlyUsed)缓存,支持get和put操作。缓存容量为固定值。

要求:

1.get操作返回键对应的值,并更新该键为最近使用

2.put操作添加键值对,如果缓存已满,则删除最久未使用的键

3.考虑高并发场景下的实现

参考代码(JavaScript):

javascript

classLRUCache{

constructor(capacity){

this.capacity=capacity;

this.cache=newMap();

}

get(key){

if(!this.cache.has(key))return-1;

co

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档