合唱队

链接: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]的最长递增/递减子序列。

 

posted @ 2020-02-28 15:40  B_luePhantom  阅读(146)  评论(0编辑  收藏  举报