CCF-20161201-中间数(100分)

package CCF;

import java.util.Arrays;
import java.util.Scanner;

/**
 问题描述
  在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
  给定一个整数序列,请找出这个整数序列的中间数的值。
输入格式
  输入的第一行包含了一个整数n,表示整数序列中数的个数。
  第二行包含n个正整数,依次表示a1, a2, …, an。
输出格式
  如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。
样例输入
6
2 6 5 6 3 5
样例输出
5
样例说明
  比5小的数有2个,比5大的数也有2个。
样例输入
4
3 4 6 7
样例输出
-1
样例说明
  在序列中的4个数都不满足中间数的定义。
样例输入
5
3 4 6 6 7
样例输出
-1
样例说明
  在序列中的5个数都不满足中间数的定义。
评测用例规模与约定
  对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。
 * @author Vivinia
 *
 * 2017年10月15日
 */
public class midNum {

	static int[] num;
	static int n,i,mid,left,right;
	public static void main(String[] args) {

		Scanner input=new Scanner(System.in);
		n=input.nextInt();
		num=new int[n];
		for(i=0;i<n;i++)
			num[i]=input.nextInt();
		input.close();
		Arrays.sort(num);     
		mid=num[n/2];               //取中间元素,中间元素要么是中间数,要么就不是,取决于两边剩余个数
		for(i=0;i<n/2;i++) {            //查找左边和中间数不相等的个数
			if(num[i]!=mid)
				left++;
		}
		for(i=n/2;i<=n-1;i++) {         //查找右边和中间数不相等的个数
			if(num[i]!=mid)
				right++;
		}
		if(left==right)
			System.out.println(mid);
		else
			System.out.println("-1");		
	}
}


原谅我这个小渣渣,Java白学了。记得当初学习Java老师应该讲到IO流那,又加上刚学习比较懵逼,不懂什么new一只小狗汪汪叫是个什么鬼,所以导致一些东西学的很不好。今天才意识到之前写的代码Scanner用完都没有关闭,百度一下说是不关闭会消耗内存,当然以前写的都是小demo,所以并没有出现问题。怪不得一直纳闷Scanner定义的变量为什么一直显示黄色的警告标志,和变量没有使用一个样,我还想eclipse这是抽什么风,明明都用了还警告我,哈哈。


另外,当一个比较简单的demo一直在修改时不断地打补丁(非得用自己头脑风暴想到的那种方法),一定要及时切换思路,不然真进死胡同,明明很简单的问题却被弄得很复杂,比如这个题,真不想说什么了,这两天不宜敲代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值