#OD443. 数组排列求和
数组排列求和
题目解析和算法源码
华为OD机试 - 数组排列求和(Java & JS & Python & C & C++)-CSDN伏城之外的博客
OJ用例
题目描述
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