从一个数组中查找和目标数最接近的或者相等的数

/**
 * 查找出最接近目标值的数,并返回。
 * @param array
 * @param targetNum
 * @return
 */
	public static int binarysearchKey(Object[] array, int targetNum) {

		//Object[] array = temp.clone();
		Arrays.sort(array);
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		int targetindex = 0;
		int left = 0,right = 0; 
		for (right = array.length-1; left!=right;) {
		int midIndex = (right + left)/2;
		int mid = (right - left);
		int midValue = (Integer) array[midIndex];
		if (targetNum == midValue) {
			return midIndex;
		}

		   if(targetNum > midValue){
		           left = midIndex;
		       }else{
		           right = midIndex;
		       }
		   
		   if (mid <=1) {
			   break;
			}
		}
		int rightnum = ((Integer) array[right]).intValue();
		int leftnum = ((Integer) array[left]).intValue();
		int ret =  Math.abs((rightnum - leftnum)/2) > Math.abs(rightnum -targetNum) ? rightnum : leftnum;
		System.out.println("和要查找的数:"+targetNum+ "最接近的数:" + ret);
		return ret;
		}

	public static void main(String[] args) {
		ArrayList array = new ArrayList();
		array.add(26);
		array.add(76);
		array.add(46);
		array.add(76);
		array.add(54);
		array.add(94);
		array.add(24);
		array.add(34);
		
		int targetNum= 74;
		System.out.println("和要查找的数:"+targetNum+ "最接近的数:"+binarysearchKey(array.toArray(), targetNum));
		
	}



/**
 * 遍历数组和要查找的数值做差,以差:数组索引存为map,然后对以差为key的数组排序,拿到差最小的索引。
 * @param array
 * @param num
 * @return
 */

public static Integer searchKey(int[] array,int num) {  
         
       int[] temp = new int[array.length];
       Map<Integer,Integer> map = new TreeMap<Integer,Integer>();
       int disnum = 0;
       for (int i = 0; i < array.length; i++) {
        disnum = Math.abs(array[i] - num);
temp[i]=disnum;
map.put(disnum, i);
}
       System.out.println("数组和的差值和数组元素的差值相减的绝对值和位置的映射结果:" + map);
       Arrays.sort(temp);
       Integer index = map.get(temp[0]);  
       System.out.println("数组和的差值和数组元素的差值相减的绝对值最小值:"+temp[0]+"最小值的key:" +  array[index]);
       return  (Integer) array[index];  
   }



/**
* 求一个数组的最大值
* @param array1
*/

public static void max1(int[] array1) {
int max = 0;
for (int i : array1) {
max = Math.max(max, i);
}
System.out.println("数组最大值是:"+max);
}



/**
* 求一个数组的最大值
* @param array1
*/
public static void max2(int[] array1) {
int max = 0;
for (int i = 0; i < array1.length; i++) {
max = max > array1[i] ? max : array1[i];
}
System.out.println("数组最大值是:"+max);
}


/**
* 求一个数组的最大值
* @param array1
*/
public static void max3(int[] array1) {
Arrays.sort(array1);
System.out.println("数组最大值是:"+array1[array1.length-1]);
}



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值