腾讯笔试3:偶数个数字里面删掉一个数之后的中位数是什么

输入:

N

3 4  1 2 6 5  8 7

解释:N表示接下来输入的数字的个数(N一定为偶数),然后下一行是输入的数字序列,然后我们要输出删除每个位置的元素之后,剩余的N-1个元素的中位数是什么(N-1一定是奇数)。


思路:首先排序,但是不能在原数组上面排序,需要复制一个数组进行排序,排完序之后,比如上面就是:

1 2 3 4 5 6

然后我们找到靠近中间的两个数:3(叫做min)和4(叫做max),然后,假如需要删除 1或者2,剩下的中位数都是4,加入我们要删除5或者6,剩下的中位数都是3,因此可以得出结论,如果要删除的数字小于min,那么此时上下的数字的中位数是max,如果删除的数字大于max,那么剩下的数字的中位数是min。

但是我们忽略了删除min和max的情况,如果删除min中位数就是max,如果删除max,剩下的中位数就是min。代码如下:


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		while(cin.hasNext()){
			int n=cin.nextInt();
			int[] arr=new int[n];
			for(int i=0;i<n;i++){
				arr[i]=cin.nextInt();
			}
			int[] temp=new int[n];
			System.arraycopy(arr,0,temp,0,n);
			Arrays.sort(temp);
			int length=arr.length;
			int maxNumber=temp[length/2];
			int minNumber=temp[length/2-1];
			for(int i=0;i<n;i++){
				if(arr[i]==minNumber){
					System.out.println(maxNumber);
				}else if(arr[i]==maxNumber)
				{
					System.out.println(minNumber);
				}else if(arr[i]<minNumber){
					System.out.println(maxNumber);
				}else System.out.println(minNumber);
			}
			
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值