【入门】导弹拦截
题目描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度,如果要 拦截所有导弹最少要配备多少套 这种导弹拦截系统。
输入格式
第一行一个整数 ,表示导弹的个数;
第二行包含 个用空格分割的整数 ,表示导弹高度;
输出格式
输出一个数字,表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
8
389 207 155 300 299 170 158 65
2
提示
【样例解释 1】
- 389:新建一套拦截系统,
- 207:拿之前的
389来拦截, - 155:拿之前的
207来拦截, - 300:新建一套拦截系统,
- 299:拿之前的
300来拦截, - 170:拿之前的
299来拦截, - 158:拿之前的
170来拦截, - 65:拿之前的
155来拦截, - 总计 2 套 拦截系统就够了
请思考后再点击查看提示
- 用一个数组维护当前有几套拦截系统,每个拦截系统的拦截高度是多少
- 对于一个新的导弹,
- 要么从原有的拦截系统里找一个来拦截,这个拦截系统的拦截高度必然不小于导弹高度,最好满足条件里拦截高度最小的那个
- 要么新建一个拦截系统
- 每个拦截系统的拦截高度,必然是一个单调上升的数组(思考为什么?)
- 对于单调上升的数组,就可以利用二分查找