字节一面笔试题:小于n的最大数

指定降序数组arr和数字n,输出数组能组成的小于等于数字n的最大值。比如arr=[9,4,3,2],n=433211,输出432999;

思路,贪心+二分。

难的在于中途有数字找不到比它小的数的话,得回退,需要确认回退逻辑怎么写。

Java代码如下:

public int maxNum(){

List<Integer> arr = Arrays.asList(9,4,3,2);

int n = 433211;

List<Integer> nlist = new ArrayList<>();

int base = 0;

while(n!=0){

nlist.add(0,n%10);

n /= 10;

base = base*10+1;

}

boolean less = false;

int res = 0;

for(int i=0;i<nlist.size();i++){

if(less){

res = res*10+arr.get(0);

continue;

}

int index = find(arr,nlist.get(i));

if(index==-1){

int l = i;

while(l>=0&&index==-1){

index = find(arr,nlist.get(l)-1);

l-=1;

}

if(index==-1){

res = base*arr.get(0)/10;

break;

}

res = res/((int) Math.pow(10,i-l-1));

res = res*10 + nlist.get(index);

for(int p=0;p<i-l-1;p++){

res = res*10+arr.get(0);

}

less = true;

}else if(arr.get(index)==nlist.get(i)){

res = res*10+arr.get(index);

}else{

res = res*10+arr.get(index);

less = true;

}

}

return res;

}

public int find(List<Integer> arr,int k){

if(k<arr.get(arr.size()-1)) return -1;

int index = -1;

int l = 0,r = arr.size()-1;

while(l<=r){

int mid = (l+r)/2;

if(arr.get(mid)==k){

return mid;

}else if(arr.get(mid)<k){

index = mid;

r = mid -1;

}else{

l = mid + 1;

}

}

return index;

}

#字节##面试##笔试##手撕代码#
全部评论

相关推荐

百度日常实习面试经验分享&nbsp;|&nbsp;智能云数据平台部📋&nbsp;面试概览岗位:日常实习部门:百度智能云&nbsp;-&nbsp;数据平台部流程:一面&nbsp;→&nbsp;二面&nbsp;→&nbsp;HR通知(一天内完成)结果:✅&nbsp;通过体验&nbsp;:面试官很nice,流程高效🎤&nbsp;一面(约60分钟)项目深挖(约40分钟)简历上的项目问得很细,每个点都会追问:原理是什么?有没有考虑过其他方案?为什么选这个方案?💡&nbsp;建议:对自己的项目要非常熟悉,每个技术选型都要有理由。八股文CSS相关display:none&nbsp;vs&nbsp;visibility:hidden标准盒模型&nbsp;vs&nbsp;怪异盒模型什么是&nbsp;BFC两栏布局的实现JavaScript基础基本数据类型&nbsp;&amp;&nbsp;引用类型ES6&nbsp;引入的新类型Map&nbsp;vs&nbsp;Set&nbsp;的区别Map&nbsp;vs&nbsp;Object&nbsp;的区别Symbol&nbsp;的作用⚠️&nbsp;踩坑记录:Map和Set的区别我说成了&quot;允许重复&quot;,面试官追问是什么重复,我发现说错了赶紧改口。大家要注意:Map是键值对,键唯一;Set是值集合,值唯一。React相关用过的Hooks有哪些useRef&nbsp;的作用useMemo&nbsp;的使用场景Hooks&nbsp;的作用useContext&nbsp;的作用工程化模块化规范及区别CommonJS&nbsp;vs&nbsp;ES&nbsp;ModuleAI相关问题实习中如何使用AI?提到了&nbsp;Skills&nbsp;和平时使用的技能个人网站搭建的&nbsp;Agent&nbsp;项目大概讲了搭建流程反问环节问了团队技术栈、实习生培养机制等。🎤&nbsp;二面紧张到忘记录音了,只能回忆一些碎片项目深挖依旧是项目拷打面试官超级好,还给我的项目提了一些改进建议!八股文type&nbsp;vs&nbsp;interfaceES模块相关问题React&nbsp;什么时候不用&nbsp;useCallback/useMemoAI深度问题用AI做了些什么Agent&nbsp;Function&nbsp;Calling&nbsp;的作用开放题:Agent更需要MCP还是Skills?灵魂反问因为感觉八股回答得不太好,所以问了:&quot;我的简历和面试有什么需要改进的?&quot;结果面试官反问我:&quot;你觉得在当下的时代,基础更重要还是对AI的把握?&quot;面试官的反馈&quot;你的简历可能不太好,但是能力很不错,要是你能来公司会给你回答你刚刚的问题。&quot;✅&nbsp;面试结果很快就收到了HR的电话通知:通过了!整体来讲:✅&nbsp;流程很快✅&nbsp;过程体验很好✅&nbsp;虽然是日常实习但感觉很好🏢&nbsp;关于部门百度智能云&nbsp;-&nbsp;数据平台部有了解的uu可以说一下这个部门怎么样嘛~
拒绝pua的可乐很想...:接好运
查看25道真题和解析
点赞 评论 收藏
分享
评论
3
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务