请问今天阿里后端笔试的第三题咋做

第三题是:
给定一个长度n的数组,每次可以选择一个数x 让这个数组中所有的x都变成x+1,问你最少的操作次数,使得这个数组变成一个非降数组
输入:n 代表数组长度;数组信息
数据量  n <= 3 * 10^5 ?(不确定), 每一个数据长度 ai <= 10^9
输出:最小操作次数

例如
输入:[2, 5, 3, 4, 9, 7]
输出:4

3 => 4 [2, 5, 4, 4, 9, 7]
4 => 5 [2, 5, 5, 5, 9, 7]
7 => 8 => 9 [2, 5, 5, 5, 9,  9]
一共四次
不会做 求思路
#阿里笔试#
全部评论
比如,你来到8,已知8的右边最小值是5,如下 …8…5… 你就知道,5这个数是一定要增长到8才行的。5 -> 8,增长3次。 我们用线段树,5…7范围上,都设置成1!注意!不是+1,是线段树里update操作!不是add操作! 表示: 所有的5肯定都要变的(线段树里5位置+1,表示关于5要操作一次) 所有的6肯定都要变的(线段树里6位置+1,表示关于6要操作一次) 所有的7肯定都要变的(线段树里7位置+1,表示关于7要操作一次) 然后,假设你接下来,来到7,7的右边最小值还是5,如下: …8 7…5… 我们用线段树,5…6范围上,都设置成1!你会发现,其实没啥变化,因为之前5…7范围都已经设置成1了。 这正好是我们要的效果! 然后,假设你接下来,来到9,9的右边最小值还是5,如下: …8 7 9…5… 我们用线段树,5…8范围上,都设置成1!你会发现,其实只在8位置上变化了,因为之前5…7范围上,都已经设置成1了。 最后你看看线段树里,总体累加和是多少就可以了。 再举个例子: 13 6 30 19 你来到13,发现右边最小值是6,于是线段树6…12范围,都设置成1 你来到6,发现右边最小值>=6,于是线段树什么也不做。 你来到30,发现右边最小值是19,于是线段树19…29范围,都设置成1 你来到19,线段树什么也不做。 最终,线段树里,只有6…12、19…29范围上有1,所以线段树整体累加和是18。就是我们要的答案。 因为值在10^9范围,所以用开点线段树,或者,用线段树离散化处理。都可以。 最小值这个信息可以用预处理数组。 时间复杂度O(N * log N)
1 回复 分享
发布于 2022-09-27 10:28 四川
我写了一个,可以看下,可惜考试的答的很烂
1 回复 分享
发布于 2022-09-27 00:10 浙江
同学同花顺尝试一下吗,面试简单不造火箭,可保姆式全程跟进度,我帖子有内推
点赞 回复 分享
发布于 2022-09-27 09:34 浙江
第二题咋做?
点赞 回复 分享
发布于 2022-09-27 08:49 上海
群里大佬说的:可以先找到一个单增子序列比如[2, 5, 3, 4, 9, 7] 就可以找到[2, 5, 9] 然后每一个都可以看做一个子区间的最大值,比如 2是[2]的最大值,5是[5, 3, 4]的最大值,9是[9, 7]的最大值,并获得这样的每个子区间的最小值,就可以得到多个闭区间 [最小值, 最大值],比如这里就可以得到[2, 2] [3, 5] [7, 9] 合并这些区间,(这个样例不用合并),合并后得到每个区间长度的和,比如这里就是5 -3 + 9 - 7 = 4,就是最后的结果
点赞 回复 分享
发布于 2022-09-26 23:47 北京
最大值减最小值就行了吧
点赞 回复 分享
发布于 2022-09-26 23:41 江苏

相关推荐

06-18 08:36
湖南大学 Java
运营你豪哥:没啥拷打的 1.增加量化结果,现在有点缺效果数据 2.突出复杂性,现在的项目描述有点像功能清单,强调一下技术难点和解决方案。
不给转正的实习,你还去吗
点赞 评论 收藏
分享
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道真题和解析
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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