计算最少出列多少位同学,使得剩下的同学排成合唱队形
说明:
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
注意不允许改变队列元素的先后顺序
请注意处理多组输入输出!
实际就是,从队伍里直接下来人,让剩下的人刚好满足条件的情况。

8个人,[186,186,150,200,160,130,197,200]
当以每位同学为最高点时,进行判断,从他左边找比他矮的同学(可以多个,且要为递增序列)。再从右边来找比他高的同学。
例如:
先找左边的
我们假设第一位身高为 186 的同学,为最高点(Ti),他左边没有其他人,所以我们设定左边人数为0
第二位身高为 186 的同学,左边只有一个186,和他一样,所以他左边也为0
第三个150,左边也为0
第四个200,左边有186和150的同学,都比他矮,但是这两者不成递增顺序,所以只能留一个,即左边为1
第五个160,左边有150的同学,所以为1
第六个130.左边没有比他矮的了,所以为0
第七个197.左边比他矮的有186,150,160,130,而成递增顺序的为[150,160]

博客围绕计算最少出列同学使剩下同学排成合唱队形的问题展开。介绍了以每位同学为最高点,分别从左右找递增和递减序列的方法,得到左右人数表,进而算出每一位同学为最高时的人数及减少人数。还提及用动态规划和分治法解决该问题,分治法将左右问题独立处理。
最低0.47元/天 解锁文章
5053





