字节一面算法:给定一个数n,如23121,给定一组数字A如{2,4,9},求由A中元素组成的,小于n的最大数,如小于23121的最大数为22999.

算法没写出来,求牛友解惑。
全部评论
记A的位数为k, 首先判断能否组成k位数. 如果不行就直接输出k-1位的最大值. k位的话直接从高位向低位贪心选择.
3 回复 分享
发布于 2022-04-08 11:07
public class Main { public static void main(String[] args) { int n=23121; int[] array=new int[] {2,4,9}; System.out.println(find(n, array)); } public static int find(int n, int[] array) { int depth=0; List<Integer> list=new ArrayList<>(); int path=0; char[] digits=Integer.toString(n).toCharArray(); dfs(n, depth, digits, array, path, list); int result=0; Collections.sort(list); for(int i=0;i<list.size();i++) { if(list.get(i)>=n) { result=list.get(i-1); break; } } return result; } public static void dfs(int n, int depth, char[] digits, int[] array, int path, List<Integer> list) { if(depth==digits.length) { list.add(path); return; } for (int i = 0; i < array.length; i++) { path = path * 10 + array[i]; dfs(n, depth + 1, digits, array, path, list); path = path / 10; } } }
2 回复 分享
发布于 2022-04-24 08:33
从前往后找每一位 相等的话 后面就必须要 <= 不相等的话 后面每一位取最大就ok了
2 回复 分享
发布于 2022-04-04 14:02
给的一组数字 A 的范围有吗?
点赞 回复 分享
发布于 2022-05-27 11:27
可以看我的帖子 我用的是贪心+回溯
点赞 回复 分享
发布于 2022-05-23 22:32
设一个标志位,从左边高位开始,如果有一样的数字就在这里填上,如果只有比它大的数字,直接返回false,不然就填一个比他小但是是小里面最大的数,然后标志位置1,如果标志位为1,后面全选最大的数字就完事了
点赞 回复 分享
发布于 2022-05-16 12:20
贪心➕回溯
点赞 回复 分享
发布于 2022-04-23 01:42
我不懂算法,不能帮你哦。
点赞 回复 分享
发布于 2022-04-03 15:26

相关推荐

04-26 23:17
已编辑
门头沟学院 C++
不鸣科技(服务器开发实习生)一面(40分钟)1.父类指针怎么调用子类的虚函数?2.析构函数需要是虚函数吗?3.父类指针析构子类对象会调用父类的析构吗?4.父类指针析构子类对象时,子类string成员、子类、父类的析构顺序?(没理解清楚,回答不是很好,应该先析构string、子类的析构、父类的析构)5.vector扩容的机制?6.vector拷贝行为可以怎么优化?(移动语义)7.如何在map中遍历删除指定的元素?8.给你一系列的元素,每个元素有一个权重,怎么让取到的元素概率和元素的权重呈比例?(没回答出来,加权随机选择,前缀和+二分查找)9.浮点数如何判断相等?(不知道,浮点数近似存储,因此不能直接==,fabs(a&nbsp;-&nbsp;b)&nbsp;10.手撕一个stack,提供push、pop、top、getMin接口反问:1.技术栈(C++和Lua)2.什么时候出结果二面(45分钟)1.面试官介绍了下面试主要内容,说后面还会有业务三面2.子类、父类、子类的成员类,它们的构造顺序?3.类成员的初始化顺序?4.为什么按照声明顺序而不是初始化列表顺序?从设计者的角度考虑为什么这么设计(开放性问题,面试官对我的回答不太满意,最后给提示,函数重载是一个原因)5.类中的成员类实例存储在栈上还是在堆上?(分情况)6.基类的析构函数为什么建议是虚函数?7.如何判断浮点数是否相等?8.基于内存对齐规则,如何设计一个类?9.在map中如何在遍历过程中删除元素?10.说说条件断点和数据断点?还有的忘了反问:1.不足的地方(思维能力要提高)后续:五分钟后约三面(以为是HR面,结果被告知三面也是技术面)三面(25min)1.问了下感兴趣的技术方向(操作系统、数据库)好那就聊聊操作系统2.进程调度算法有哪些?3.进程和线程的区别?4.线程会共享进程的哪些资源?5.线程栈空间?6.说一说内联函数?7.函数调用的步骤?反问:1.不足之处&nbsp;2.实习生培养方案后续:三面挂了三面那么短就觉得不太对劲果然是g了timeline:4.15&nbsp;投递4.18&nbsp;一面4.23&nbsp;二面4.24&nbsp;三面4.25&nbsp;感谢信
点赞 评论 收藏
分享
04-26 10:50
已编辑
太原理工大学 Java
查看16道真题和解析
点赞 评论 收藏
分享
评论
3
17
分享

创作者周榜

更多
牛客网
牛客企业服务