小米手机研发工程师面试问题集.docxVIP

  • 0
  • 0
  • 约6.93千字
  • 约 20页
  • 2026-02-04 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年小米手机研发工程师面试问题集

一、编程能力测试(共5题,每题10分,总分50分)

1.题目:

请实现一个函数,输入一个正整数n,返回其阶乘的字符串形式。例如,输入`5`,返回`120`。要求不使用库函数,并考虑大数处理。

答案:

java

publicStringfactorialToString(intn){

if(n0)return0;

if(n==0)return1;

long[]result=newlong[1000];//阶乘结果可能非常大

result[0]=1;

intlength=1;

for(inti=2;i=n;i++){

intcarry=0;

for(intj=0;jlength;j++){

longtemp=result[j]i+carry;

result[j]=temp%10;

carry=temp/10;

}

while(carry0){

result[length++]=carry%10;

carry/=10;

}

}

StringBuildersb=newStringBuilder();

for(inti=length-1;i=0;i--){

sb.append(result[i]);

}

returnsb.toString();

}

解析:

-使用数组存储每一位数字,避免整数溢出。

-从低位到高位逐位计算乘积,处理进位。

-最终将数字反转拼接为字符串。

2.题目:

给定一个包含重复元素的数组,请找出所有不重复的三元组,使得三元组内元素之和等于目标值。例如,输入`[-1,0,1,2,-1,-4]`和目标值`0`,返回`[[-1,-1,2],[-1,0,1]]`。

答案:

java

publicListListIntegerthreeSum(int[]nums,inttarget){

ListListIntegerres=newArrayList();

if(nums==null||nums.length3)returnres;

Arrays.sort(nums);

for(inti=0;inums.length-2;i++){

if(i0nums[i]==nums[i-1])continue;//跳过重复元素

intleft=i+1,right=nums.length-1;

while(leftright){

intsum=nums[i]+nums[left]+nums[right];

if(sum==target){

res.add(Arrays.asList(nums[i],nums[left],nums[right]));

while(leftrightnums[left]==nums[left+1])left++;

while(leftrightnums[right]==nums[right-1])right--;

left++;

right--;

}elseif(sumtarget){

left++;

}else{

right--;

}

}

}

returnres;

}

解析:

-先排序数组,便于跳过重复元素。

-固定第一个数字,使用双指针法在剩余部分寻找和为`target-nums[i]`的二元组。

-跳过重复数字避免重复解。

3.题目:

请实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。缓存容量为`capacity`,超出容量时需删除最久未使用的元素。

答案:

java

classLRUCache{

classNode{

intkey,value;

Nodeprev,next;

Node(intk,intv){key=k;value=v;}

}

MapInteger,Nodemap=newHashMap();

Nodehead=newNode(0,0),tail=newNode(0,0);

intcapacity;

publicLRUCache(intcapacity){

this.capacity=capacity;

head.next=tail;

tail.prev=head;

}

publicintge

文档评论(0)

1亿VIP精品文档

相关文档