9.2美团

100 100 6.67 45 100
想问问各位哥第三题怎么写
就是那个要使第一个数最大的最小操作数
例如:
4
1 2 3 4
输出:
2

可对任一元素x2或/2向下取整。
每次笔试遇到这种题目都不会
全部评论
第三题样例很少,很多100%的其实不对。比如1 2 5 这个其实只需要2次,但是看评论的一些方法需要3次。我的思路是,找出最大元素,和次大元素,先把最大元素/2,直到“将”要比次大元素小。在把第一个元素*2直到比次大元素大。再看下此时和最大元素比还需不需要再乘一次2。这个正确性证明:如果此时想让第一个元素少乘一次2,就要让最大和次大都要/2,所以肯定步数会变多。而对于最大元素,其除2向下取整比第一个元素*2要小的多一些,肯定贪心希望最大元素尽量除2(比如1,2,5这种5/2=1肯定比2*2划算)。
2 回复 分享
发布于 2023-09-02 21:52 上海
记录首个元素,排序,如果记录元素不是排序后的倒数第二个直接乘2直到大于,是倒数第二个判断一下最大的除2个数与乘2个数比较
2 回复 分享
发布于 2023-09-02 21:15 黑龙江
要维护一个堆吧,当然如果图省事情可以直接第一个数乘2,也可以过83
点赞 回复 分享
发布于 2023-09-03 01:16 广东
排序数组nums[1, n],第一个数依次乘2,直到剩余最后一个数,最后一个数除以2
点赞 回复 分享
发布于 2023-09-02 22:14 北京
把第一个数提出来 剩下的找出最大的那个数循环/2,每除一次结果加一,直到比第一个数小或者相等。通过100
点赞 回复 分享
发布于 2023-09-02 22:10 浙江
把第一个数字拿出来,剩下的从小到大排序,并遍历i=1->n-1,如果第一个数字小于当前的a[i],则让第一个数字*=2知道大于等于;如果大于直接跳过。 最后若是走到n-1的位置,则判断a[n-1]/=2所需的步数,和a[0]*=2的步数(直到a[0]>a[n-1])的最小值,用最小值更新一下答案。 这样一来1 2 5的例子,一开始1会和2比大小,然后a[0]变成2,然后和5比大小,发现5/=2比1*2*2要用的次数少,所以最后的答案就是2. 当时这样考虑贪心是因为,如果你当前的a[0]没和最后一位数字比大小,那么不需要让最后的a[n-1]除以2,因为前面还有很多没比过大小的n-2,n-3等等的位置,这些位置如果你想执行除以2的操作,那实际上肯定不如a[0]*=2的操作快。所以真正要比较的只有a[0]和a[n-1]
点赞 回复 分享
发布于 2023-09-02 22:06 北京
我用的最大堆,每次要么第一个翻倍,要么减半最大值再比较,每一步都贪婪取最大缩短差距的那个方案(维护一个 max-min的差值变量);
点赞 回复 分享
发布于 2023-09-02 21:45 四川
第三题我是这么做的,先把除第一个数以外的数字升序排序,然后分两个方向计算,一个从左往右,一个从右往左。第一种只需要计算第一个数字跟最后一个数字差了几倍就可以了,连续乘2直到大于等于最后一个数字,乘的次数就是从左往右的结果。然后再从右往左,先从最后一个数字开始,所有大于第一个数的数字都连续除以2直到小于等于第一个数字,所有除以二的次数加起来就是从右往左的计算结果,最后两种方向的结果取最小值就是答案。
点赞 回复 分享
发布于 2023-09-02 21:30 重庆
大佬,问下第二题怎么做的,我只过了90多😭😭
点赞 回复 分享
发布于 2023-09-02 21:27 湖南
先遍历找到最大数,然后只要第一个数还大于最大数就判断,如果最大数mod2余1,那就最大数除2,要不然就第一个数乘2,这样直到第一个数大于最大数,退出循环,返回操作的个数结果就行
点赞 回复 分享
发布于 2023-09-02 21:23 广东
就只有一种情况,全数组只有个数大于第一个数,并且这个数%2=1。这种情况用这个数/2会比直接乘2第一个数少一次
点赞 回复 分享
发布于 2023-09-02 21:22 山东
把除了第一个数都放进优先队列,每次取出比较一下然后除2放回
点赞 回复 分享
发布于 2023-09-02 21:21 广东
找到最大数,往下取整除不就行了
点赞 回复 分享
发布于 2023-09-02 21:14 广东
第三题写了个dp通过了85%
点赞 回复 分享
发布于 2023-09-02 21:12 辽宁
正难则反,你只需要枚举需要增加多少次。这个增加显然只会对a[1] 增加,然后判断剩下的元素需要减少多少次。这样复杂度就是( log(1e9) * N)。
点赞 回复 分享
发布于 2023-09-02 21:11 浙江
猜了一个首位不是前二就乘法,否则除法,过了…
点赞 回复 分享
发布于 2023-09-02 21:11 北京

相关推荐

不愿透露姓名的神秘牛友
07-24 13:39
在记录秋招的大魔王很...:别被忽悠了,我做了多年销售。我可以告诉你,这就是忽悠你的,销售一定要看底薪也要看提成两者不可缺一。提成是有业绩的时候才拿的到的,谁能保证一直有单状态都好。销售有时候很讲究运气的。底薪是你这个人这个岗位日常工作体现的价值。别小看底薪,你看那些跳槽去做经理主管的,底薪底一些,人家愿意去吗?所以那些说销售靠提成的纯属忽悠,除非他们的业务很容易成单。
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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