题解 | #合唱队#
合唱队
http://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
我认为大家都用的动态规划方法,时间上面确实有些长,如果用Python这些语言可能就会超时,我想了一下有一个方法可以节省时间。
如题示例: 186 186 150 200 160 130 198 200
对应的dp值 1 1 1 2 2 1 3 4
其实不需要一个一个去比较 dp[i] 和 dp[j] ,例如对于198,她是不需要与186 186 150 去比较的,因为他们dp值为不是在186 186 150 200 160 130 中最大的,最大的dp值对应200 160 ,意思就是,做比较的时候,依次和dp值最大的数去比较大小就可以了
所以198 和200 160 去比较。 而130则先与200 160 比较,再和186 186 150比较(即与 比最大dp值次一级的数 去比较,如果依然小于这些数,那就再与 比上个dp值次一级的数 去比较)
即使用字典给数赋对应的dp值,然后按dp值大的依次比较 又或者直接按dp值把原来的list分为若干小list,比如dp1 = [186,186,150] dp2 = [200,169] ...
总之就是减少让元素与前面元素挨个比较的机会,只和大的dp对应的元素比较,依次去比较。
可以用dict或者小list 进行分类来实现,代码还没写,先跟大家讨论一下思路,如果不行,欢迎大家给我建议哈。后面我再更新代码实现。。。

