合唱队
链接:https://www.nowcoder.com/questionTerminal/6d9d69e3898f45169a441632b325c7b4?f=discussion
来源:牛客网
题目:计算最少出列多少位同学,使得剩下的同学排成合唱队形。
说明:
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
输入描述:
整数N
输出描述:
最少需要几位同学出列
示例1
输入
8 186 186 150 200 160 130 197 200
输出
4
问题关键:选取哪个节点作为合唱队的中心?该删除哪些节点? 换一个角度来思考,对于每个元素 arr[i] , 我们只要求出[0~i] 和 [i~n]包含arr[i]的最长递增子序列和最长递减子序列长度,然后相加,-1(去重) , 进行比较,就能够求出结果。 因此,算法的关键在于求出如何求出包含arr[i]的最长递增/递减子序列。