链接:https://ac.nowcoder.com/acm/contest/19306/1006
来源:牛客网
题目描述
给你一个1 -> n的排列,现在有一次机会可以交换两个数的位置,求交换后最小值和最大值之间的最大距离是多少?
输入描述:
第一行一个数n
之后一行n个数表示这个排列
输出描述:
输出一行一个数表示答案
示例1
输入
5
4 5 1 3 2
输出
3
说明
把1和2交换后
序列为4 5 2 3 1
最大值5在数组的2位置,最小值1在数组的5位置
距离为3
备注:
对于100%的数据,1 <= n <= 100
思路:
用maxi和mini标记了最大值了最小值的位置之后,确认哪个在数组右边,尽可能地去移动离边界远的那个值,因此要比较maxi和mini距离边界的距离。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int arr[n],i;
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
int max=arr[0],maxi=0,min=arr[0],mini=0;
for(i=0;i<n;i++)
{//用maxi和mini标记最大值和最小值的位置
if(arr[i]>max)
{
max=arr[i];
maxi=i;
}
if(arr[i]<min)
{
min=arr[i];
mini=i;
}
}
int s;
if(maxi>mini)//maxi在右,距离为mini到右端的距离和maxi到左端的距离的最大值
s=n-1-mini>maxi?n-1-mini:maxi;
else//mini在右,距离为maxi到右端的距离和mini到左端的距离的最大值
s=n-1-maxi>mini?n-1-maxi:mini;
printf("%d",s);
return 0;
}
☃️今天也要加油鸭!!