java算法小问题

给定一个 List 里面有一堆数 可能是 12,5,78,90,5 也可能是 567,789,321,4,56,76 类似这种无规则无序地长度可变地

现在给你任意一个整数 请找出 数组中最接近该数的 那个数 也就是 差值最小那个

请给个算法

排序很简单在java里面
[code="java"]Arrays.sort(arrays);[/code]

然后是调用Arrays的BinarySearch
[code="java"]public static int binarySearch(int[] a,
int fromIndex,
int toIndex,
int key)[/code]
可以参照一下,这个方法,算法效率高

可以这样弄,先把这些数据取出来,然后求差,
public int getMin(List list,int module)
{
int arrays[]=new int[list.size()];
for(int i=0;i<list.size();i++){
int currIndex=new Integer(list.get(i).toString()).intValue();
int margin=Math.abs(currIndex-module);
arrays[i]=margin;
}
Arrays.sort(arrays);//排序
return arrays[0];
}

先排序,然后二分查找,好像是叫BinarySearch

这个算法是找等于那个查找因子,就是你的那个任意一个整数。
可以把它改为差值最小的一个方式

[code="java"]import java.util.ArrayList;
import java.util.List;

public class TestTest {
public static void main(String[] args) {
TestTest test = new TestTest();
List list = new ArrayList();//存放你的数组
list.add(0);//....
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(test.getNumber(list, 2));
}

public int getNumber(List<Integer> list, int a){
    int temp = 0;
    int ret = 0;
    for(int b:list){
        if(temp >= Math.abs(b - a)){
            temp = Math.abs(b - a);
            ret = b;
        }
    }
    return ret;
}

}[/code]

哈哈 你试试我这个 好使就赶快给分 今天最后一天了谢谢