求数组中相差最小的两个数O(N)

基本思想:

1. 遍历该数组 ,找出该数组中最小和最大值,则所求的两个整数的差值一定小于等于max - min;

2. 从头开始 , 一个一个元素与(max + min) / 2 比较,如果小于,则表示所求的两个整数的差值介于min 到 a[i]之间 ,更新max = a[i] ,如果大于,则表示所求的两个整数的差值介于a[i]到max之间 ,更新min = a[i] ;  如果小于min或者大于max ,continue

3. 最后结果为更新后的max和min

 

	public static int minDiffOfTwoNum(int [] a) {       //求数组中两个相差最小的数
		int min = Integer.MAX_VALUE;
		int max = Integer.MIN_VALUE;
		int temp = 0;
		
		for(int i = 0; i < a.length; i++) { //  得到最小值和最大值
			if(min > a[i])
				min = a[i];
			if(max < a[i])
				max = a[i];
		}
		
		System.out.println("min = " + min + "max = " + max);

		for(int i = 0; i < a.length; i++) {
			temp = a[i];
			if(temp >= max || temp <= min)
				continue;
			else if(2 * temp > (min + max))
				min = temp;
			else
				max = temp;
		}
		
		return max - min;
	}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值