字节一面笔试题:小于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;

}

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

相关推荐

04-15 11:25
已编辑
河海大学 Java
#牛客AI配图神器#&nbsp;还是电话面&nbsp;无手撕面试官非常专业,提出了很多我听都没听说过的东西,只能说还是太菜了不配面淘天不愧是淘天偏核心的部门(商品库存相关),被拷打的要哭了全程压力拷打,全程非常规八股,全程场景题&nbsp;我声音最后都在颤抖问的全是JUC和消息队列,刚好是我最薄弱的两个点,直接被击穿了1.自我介绍2.RAG和普通检索有什么区别么?3.模型相关?了解过过openManus么?4.你怎么理解MCP?5.ZSET的数据结构?介绍下跳表?跳表的元素插入?6.对比下B+树和跳表?各有什么优缺点,为什么redis不用B+树?为什么mysql不用跳表?//说了B+树叶子节点是双向链表直接被打断,你确定是双向链表么?//拷打后,最后告诉我双向链表是InnoDB的优化,不是B+树本身的实现7.为什么用redis的哨兵模式?为啥不直接用集群模式?8.简单介绍一下caffine的本地缓存她有什么特点么?9.你有没有遇到数据不一致的情况?简单介绍canal的实现原理?10.简单介绍一下Mysql的主从复制的流程?Binlog里面记录的是日志还是数据?//噩梦开始了好多是我这辈子都没见过的题11.rabbitmq有什么特点?发布订阅的模式是推还是拉?怎么保证消息是顺序的执行的?12.十个消费者监听队列,设置了顺序执行,有执行一个异常了,这种情况下怎么处理呢?怎么保证顺序性?13.有一个消费没消费掉,卡住了,其他的消费者还会正常消费么?14.模拟一个下单的场景,超过时间自动释放,你来设计一下?消息清除还是放到死信队列?15.放一条10s过期的后在放一条5s过期的,5s的会先于10s的进入死信队列么?16.分布式环境中的一致性怎么了解的?有了解过CAP么?(我简历都没写你为什么要问)17.我问你!我给你个场景!我有十批任务,每批任务有10个子任务,我希望子任务是并行执行的,但是在外面十批任务是串行执行的,你有什么设计思路么?18.你有了解过JUC中关于线程调度的工具类么?19.那你介绍下CAS吧?哪些关键的对象通过CAS进行实现或者优化的?拷打结束1.你学校在哪里?对工作地有什么要求么?杭州是ok的么?2.除了阿里还面过其他的么?(已经被拷打麻了,脑子转不动,全都如实招了,第一次感受到无力感)?还在流程中的有哪些?3.有拿到过offer么?还有啥在流程当中么?(可能怀疑我太菜了,没啥可信度)4.其实我看你的项目当中用的技术,还是比较喜欢去了解的,但是我希望你在用的时候去更深入的了解?5.其实也可以理解,毕竟你是学生阶段,也没啥并发量,如果在淘天大量级的情况会有很多问题出现,还是要深入了解本周第一寄消息队列是速成的,根本没接触过这么多功能,我在项目中也只是用了个异步调用解耦,为什么要这么拷打我啊后续:估计是压力面,已经约了三面
查看24道真题和解析
点赞 评论 收藏
分享
评论
2
12
分享

创作者周榜

更多
牛客网
牛客企业服务