美团-2021校招-第十场-2-正则序列
给定一个长度为n的任意序列
可能有重复
转换为正则序列
- 只包含n个元素
- 序列中元素范围都在[1,n]
- 不存在重复元素
要求:
- 通过加一/减一操作转换
- 步数最小
-
对于一个小于1的数
只能做+操作
当前数组中1是否存在?存在就加到1,
不存在,1+1=2是否存在?存在就加到2,以此类推 -
对于一个大于n的数,类比以上
-
对于一个重复的数…我怎么知道有数重复了?
查找,有没有一样的数
有的话,该数+1是否存在?存在就+1,不然就-1是否存在?存在就减一
……
评论老哥们的题解
换个思路,按照定义,我们能知道最终的序列是一定的、唯一的:1,2,3,4…n
对数组进行排序后,直接让对应位置的数转换就行了
无论是什么排列的正则序列,改动最少的方案一定是对输入序列和正则序列中相同排名的元素进行修改
贪心…吗?每一步的最优解就是最终的最优解
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16575591.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步