#牛客在线求职答疑中心#小欧有一个长度为n的数组{a1,a2,….,an},他可以进行任意次操作:
•选择1≤i,j≤n,i≠j,执行ai=ai+1同时aj=aj-1。(前提是aj>1,也就是说操作后数组的所有元素都必须还是正整数。)

他想从数组中选择一个子序列,使得子序列是一个排列,请问在可以进行任意次上述操作的前提下,这个“排列子序列”的长度最长是多少?

定义子序列为从原数组中删除任意数量(可以为零、可以为全部)的元素所得到的新数组。

长度为n的排列是由1~n这n个整数、按任意顺序组成的数组,每个整数恰好出现一次。例如,{2,3,1,5,4}是一个排列,但{1,2,2}不是一个排列(数组中的2出现了两次),{1,3,4}也不是一个排列(长度为3但数组中有4)。
|输入描述
第一行输入一个正整数n(1≤n≤10^5)代表数组中的元素数量。
第二行输入n个正整数a1,a2,...,an(1≤ai≤10^5)代表数组元素。
| 输出描述
在一行上输出一个整数,代表最长的“排列子序列”长度。

说明
可以选择i=3,j=4,操作两次,数组a变为[1,2,7,3],可以选
择的最长排列子序列为[1,2,3],长度为3。

示例:
输入:
4
1 2 5 5
输出:
3

用python编程
全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务