首先,我们需要找到数组中的最大值和最小值,以及它们的位置。
然后,我们需要将最大值和最小值移动到数组的两端。这里有两种可能的情况:一种是将最大值移动到数组的左端,最小值移动到数组的右端;另一种是将最小值移动到数组的左端,最大值移动到数组的右端。我们需要计算出这两种情况下的交换次数,然后取最小的那个。
对于第一种情况,我们需要将最大值移动到数组的左端,最小值移动到数组的右端。这需要的交换次数为pos1 + n - pos2 - 1。其中,pos1是最大值的位置,pos2是最小值的位置,n是数组的长度。
对于第二种情况,我们需要将最小值移动到数组的左端,最大值移动到数组的右端。这需要的交换次数为pos2 + n - pos1 - 1。
最后,我们取这两种情况下的最小交换次数,即为最终的答案。
C++
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=1e5+10;
int n;
int a[maxn];
int main(){
        std::ios::sync_with_stdio(false);
        cin>>n;
        int idMax=1,idMin=1;
        for(int i=1;i<=n;++i){
                cin>>a[i];
                if(a[i]<a[idMin]) idMin=i;
                if(a[i]>a[idMax]) idMax=i;
        }
        cout<<min(idMax-1+n-idMin,idMin-1+n-idMax);
        return 0;
}
Java
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int max = 0, min = Integer.MAX_VALUE, ans = 0;
        int maxindex = 0, minindex = 0;
        for (int i = 0; i < n; i++) {
            int cur = in.nextInt();
            if (cur > max) {
                max = cur;
                maxindex = i;
            }
            if (cur < min) {
                min = cur;
                minindex = i;
            }
        }
        if (minindex < maxindex) {
            ans = minindex + n - 1 - maxindex;
        }else {
            ans = maxindex + n - 1 - minindex;
        }
        System.out.print(ans);
    }
}
Python
n = int(input())
w = list(map(int, input().split()))
max_value = float('-inf')
min_value = float('inf')
pos1 = None
pos2 = None
for i, num in enumerate(w):
    if num > max_value:
        max_value = num
        pos1 = i
    if num < min_value:
        min_value = num
        pos2 = i
res=min(pos1+n-pos2-1,pos2+n-pos1-1)
print(res)
        小红获得了一个仅包含正整数且每个元素各不相同的数组,显然数组里存在最大值与最小值。小红每次能够交换两个相邻的数字,他想知道,将最大值与最小值分别移动到数组两端,最少需要交换多少次?
第一行输入一个正整数n,数组元素的个数。
接下来一行为n个各不相同的正整数,第i个数代表数组内第i个元素(1≤i≤n)。
1≤n≤105
1≤ai≤1e9
一个正整数,代表最少需要交换的次数。
输入
5
4 5 3 1 2
输出
2