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

}

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

相关推荐

11-25 19:53
湖南大学 Java
字节剪映一面1.&nbsp;你做的项目是实际有社会上的用户在使用,还是个人兴趣去研究的?2.&nbsp;你大概能实习多久?3.&nbsp;实习地点在广州或者深圳,你有了解吗?4.&nbsp;请整体介绍一下鹿山美食探店平台的整体架构,你是怎么设计的?5.&nbsp;你都是去云上找的服务器吗?是买的还是其他方式?6.&nbsp;整个系统分成了几大块?它们的分层架构是怎么样的?7.&nbsp;这些功能都是你一个人做的吗?8.&nbsp;你的秒杀功能是怎么设计的?9.&nbsp;你是怎么得出高并发下乐观锁实现秒杀失败率高的结论?做了压测吗?10.&nbsp;压测了多少&nbsp;KPS?11.&nbsp;1000&nbsp;个并发下的失败率是多少?12.&nbsp;你是用&nbsp;MySQL&nbsp;去判断库存是否大于&nbsp;0&nbsp;吗?13.&nbsp;改完判断库存的方式后,秒杀成功率有明显提升吗?14.&nbsp;你用&nbsp;Redis&nbsp;减库存时,减到&nbsp;0&nbsp;怎么处理?如何防止减出负数?15.&nbsp;改为&nbsp;Redis&nbsp;缓存库存&nbsp;+&nbsp;异步下单后,有再进行压测吗?16.&nbsp;异步下单后,如何让用户实时感知到秒杀成功与否?17.&nbsp;如果想要提高秒杀的并发量,你还有什么优化措施?18.&nbsp;库存分段具体怎么分段?19.&nbsp;针对线上工业级的量,排行榜的更新和查询有什么优化措施?20.&nbsp;设计全局热榜(更新频繁、查询量大),从更新和查询两方面该怎么设计?21.&nbsp;千万用户量级下,用户频繁点赞导致&nbsp;Redis&nbsp;频繁写,这种情况合理吗?有考虑过相关场景吗?22.&nbsp;全局热榜查询时,有什么应对高查询量的措施?23.&nbsp;你在项目中的哪些场景分别解决了缓存穿透、雪崩和击穿的问题?24.&nbsp;请分别讲解缓存穿透、雪崩和击穿是什么?25.&nbsp;如何应对缓存穿透?26.&nbsp;布隆过滤器会有误判吗?27.&nbsp;缓存雪崩的第一种情况(缓存统一过期)怎么解决?28.&nbsp;如何解决缓存击穿?29.&nbsp;热门&nbsp;key&nbsp;非常热,全网都来查询,即使有&nbsp;Redis&nbsp;缓存也可能爆掉,这种情况怎么处理?30.&nbsp;多级缓存该如何分布?31.&nbsp;如何提高一个热门&nbsp;key&nbsp;的并发量?32.&nbsp;Java&nbsp;中的两个等号和&nbsp;equals&nbsp;有什么区别?33.&nbsp;如果&nbsp;equals&nbsp;没有实现,默认比较的是什么?34.&nbsp;用双引号声明的字符串&nbsp;&amp;quot;ABC&amp;quot;&nbsp;和&nbsp;new&nbsp;String(&amp;quot;ABC&amp;quot;)&nbsp;用两个等号判断是否相等?35.&nbsp;Java&nbsp;中的&nbsp;Volatile&nbsp;关键字有什么作用?36.&nbsp;Volatile&nbsp;能保证原子性吗?37.&nbsp;实际中你平常会用到&nbsp;Volatile&nbsp;关键字吗?38.&nbsp;交替打印是怎么样的实现?多个线程修改变量时需要加锁吗?39.&nbsp;计算机存储层次从快到慢依次是哪些?40.&nbsp;二维数组按行和按列遍历,性能会有差别吗?41.&nbsp;TCP&nbsp;中&nbsp;TIMEWAIT&nbsp;状态有什么作用?42.&nbsp;你对&nbsp;TCP&nbsp;的哪些知识还有印象?43.&nbsp;TCP&nbsp;的全双工能解释一下吗?44.&nbsp;TCP&nbsp;和&nbsp;UDP&nbsp;主要有哪些区别?45.&nbsp;两条&nbsp;SQL&nbsp;语句的性能怎么样?如果不行该怎么优化?46.&nbsp;模糊匹配时除了把字段反过来存,还有其他更高效的办法吗?47.&nbsp;深度分页问题该怎么处理?48.&nbsp;请分别举例出行锁和表锁的触发场景?49.&nbsp;更新操作一定是行锁吗?有没有什么条件会变成表锁?50.&nbsp;Redis&nbsp;中的过期删除策略是怎么样的?51.&nbsp;由&nbsp;N-1&nbsp;个正整数组成的未排序数组,元素是&nbsp;1&nbsp;到&nbsp;N&nbsp;不重复的整数,如何找到缺失的那个数?52.&nbsp;给定一个先序和中序序列,如何输出后续序列?53.&nbsp;你对本次面试的项目组主要业务流程有什么想要咨询的吗?54.&nbsp;你对面试流程(日常实习生)有什么想要咨询的吗?55.&nbsp;你对简历有什么想要咨询的建议吗?
点赞 评论 收藏
分享
评论
2
15
分享

创作者周榜

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