【算法】超级秘密军事小队
[https://www.educoder.net/problems/rwofln2px9kv/oj/b7jfnpm3]
/*
就是将最大值交换到左边和最小值交换到右边花费的时间
只能相邻交换
*/
#include<stdio.h>
int main() {
int n;
scanf("%d",&n);
int arr[n];
for (int i=0; i<n; i++) {
scanf("%d",&arr[i]);
}
int fmax,fmin; // 标记最小值和最大值的位置,标记第一次出现位置
int max = -999, min = 999; // 标记的最大最小值
for(int i=0; i<n; i++) {
if (arr[i]>max) {
max = arr[i];
fmax = i;
}
if (arr[i] <= min) {
min = arr[i];
fmin = i;
}
}
int res=0;
// 只有需要移动时才进入
if (fmax!=0 || fmin!=n-1) {
// 最大值和最小值没有交叉(不用越过对方移动)n-1是最右边下标
if (fmax < fmin) {
res = fmax+(n-1-fmin);
} else if(fmin < fmax) {
// 交叉,需要多减1,因为最大值移动到左边后,最小值移动右边就少了一个位置
res = fmax + (n-fmin-2);
}
}
printf("%d",res);
return 0;
}