### 题目如下
现有一个队列,共有N个数据(1-Nb不重复),排序随机,如: 5 3 1 4 2 。
需要做以下操作,
1、可以把队尾的数据移到头部(或者头部移到尾部),如把2移到头部,队列变成如下: 2 5 3 1 4。需要消耗能量为2。
2、一直移动队尾的数据到头部,如果该数据为剩余数据最小值,可以移除该数据,消耗能量为0.
3、一直重复上述步骤,直到数据全部移除为止。
### 问题
怎么计算一个随机队列全部移除需要消耗的能量值。
### 示例
队列5 3 1 4 2移除需要的能量一共为18:
1、把2移到头部,队列:2 5 3 1 4,消耗能量2。
2、把4移到头部,队列:4 2 5 3 1,消耗能量4。
3、把1移到头部,队列:1 4 2 5 3,消耗能量1。
4、移除1,消耗能量为0。队列:4 2 5 3.
5、把4移到尾部,队列:2 5 3 4 ,消耗能量4。
6、把2移除,消耗能量0。队列:5 3 4,
7、把4移到头部,队列:4 5 3 ,消耗能量4。
8、把3移到头部,队列:3 4 5,消耗能量3。
9、把3移除,消耗能量0。队列:4 5,
10、把4移除,消耗能量0。队列:5,
11、把5移除,消耗能量0。全部移除完毕。
问题没怎么搞懂要考察什么,问题是计算移除所有元素所需能量, 这移除方法就有很多,所需能量也不同,我想可能想问的是所需最少能量吧。如果按照这种思路来分析
- 1 队列中元素自身的值就代表能量,每次执行移除操作前都是前移或者后移一种,
- 2 由此可以选择二分法来计算
- 3 将队列中最小的数字找到,根据最小元素位置分为,前组 和 后组
- 4 计算(前组)和(自身 + 后组)的能量进行比较 若前组能量小,则选择后移;反之,则前移。
- 5 移动元素直到最小的元素达到移除位置,移除
- 6 若队列中还有元素,则回到 步骤3 ;若没有,则完成
#6
更多评论