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 北京

相关推荐

点赞 评论 收藏
分享
机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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