数组去最值 int delMaxMin(int A[],int n);

PTA 数组去最值
比赛成绩中“去掉一个最高分,去掉一个最低分”常有。编写函数,对传入的指定长度的指定数组进行去最值处理(去掉一个最大和一个最小值,其它元素保持相对不变),删除最值时需要移动元素(后边的元素要前移),要求采用高效算法:移动元素尽量少的元素,因为最大最小值是两个,故原来的数组长度自然是减少了两个,主调函数自知,你不用返回删除后的长度,但是,要求删除函数返回总的移动次数(以测试你是不是以最少的移动完成)。

函数接口
int delMaxMin(int A[],int n);
输入样例
10
9 3 8 3 3 9 8 5 8 8
输出样例
{9,3,8,3,8,5,8,8}
4
#include<stdio.h>
#include<stdlib.h>
int delMaxMin(int A[],int n){
	int count=0;
	int mz,my;//用于记录最左值和最右值的最值的下标,
	int max=A[0],min=A[0];
	for(int i=0;i<n;i++){
	 if(max<=A[i]){
            max=A[i];
            mz=i;
        }
   	 if(min>=A[i]){
   	 	min=A[i];
   		my=i;
   		}
	}
	//对数组重新排序,先处理最左侧的最值
	int temp;
	if(my > mz){
		temp = mz;
		mz = my;
		my = temp;
	}//将最左侧的最值与右侧的最值之间的数进行移动,并记录移动次数
	for(int i=my+1;i<mz;i++){
		A[i-1] = A[i];
		count++;
	}//将最右侧的最值后的数移动
	for(int j=mz+1;j<n;j++){
		A[j-2] = A[j];
		count++;
	}
	return count;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值