#OD443. 数组排列求和

数组排列求和

题目解析和算法源码

华为OD机试 - 数组排列求和(Java & JS & Python & C & C++)-CSDN伏城之外的博客

OJ用例

题解 - 数组排列求和 - Hydro

题目描述

1 到 n 的 n 个连续的数字组成一个数组,n 为 3 的倍数

每次按照顺序从数组中取出 3 个元素,去掉这 3 个元素中的一个最大值和一个最小值,并将剩下的元素累加为S,S初始值为0。

可以通过调整数组中元素的位置改变最终结果,每移动一个元素计为移动一次。

请计算最少移动几次可以使得数组和S最大。

输入描述

数组长度 n 的范围为 [3, 600]

数组中数字范围 [1, 10000]

数组由一个字符串表示,不同数字元素之间使用空格分隔

输出描述

移动次数是一个自然数

无需移动,返回0

用例1

输入

1 8 9 7 4 2 5 6 3

输出

1

说明

3 8 9 -> 8,7 4 2 -> 4,5 6 1 -> 5,

8+4+5 = 17,

将7移动到5 6之间,调整结果为 3 8 9 4 2 5 7 6 1,

3 8 9 -> 8,4 2 5 -> 4,7 6 1 -> 6,

8 + 4 + 6 = 18,

18 是所有排列中的最大值,输出1

用例2

输入

2 6 9 5 4 3 8 7 1

输出

2

说明

3 8 9 -> 8,7 4 2 -> 4,5 6 1 -> 5,

8+4+5=17,

将9移动到8之前,7移动到6之后,调整结果为 3 6 7 5 4 2 9 8 1,

3 6 7 -> 6,5 4 2 -> 4,9 8 1 -> 8,

6 + 4 + 8 = 18,

18 是所有排列中的最大值,输出2