【算法】超级秘密军事小队

[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;
}
posted @ 2024-11-09 20:38  Lnnau  阅读(11)  评论(0)    收藏  举报  来源