java如何实现两个数最接近的比较  例如
public int getAdjacent(List <Integer>list,int x);用list集合里面的元素值跟x比较,首先取单个元素计较,再取两个元素相加比较,直到N个元素相加比较,最后返回最接近x的数,这个最接近x的数必须比x小,也就是单个比较的话首先先去掉大于x的元素再比较 ,如此类推,直到N个相加输去掉大于X的数再比较如:List xlist = new ArrayList();
for(int i=0;i<list.size();i++)
{
 if(list.get(i)<x)
{
 xlist.add(list.get(i))
}
}最后用xlist元素的值跟x比较,并把返回的最接近X的值放入最接近X的set中, 如此类推 直到第N个元素相加最接近X的值放入set中,此时set中保存的是由单个元素到N个元素相加最接近X的值,再用set值去比较 最终返回 最最接近X的值请大家贴出  验证过的代码 合适的话结贴可以追加分数

解决方案 »

  1.   

    这个问题有点像背包问题,由于最接近50的组合可能有多种,我在每次有结果的时候都打印了一次,最后的结果是最后打印的那个setimport java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Set;
    public class N110821 {

    static private int dif; //当前最大组合的和
    static private Set<Integer> results = new HashSet<Integer>(); //存放结果使用
    static private int comNum; //比较数
    static private List<Integer> iLists = new ArrayList<Integer>(); //需要筛选的list
    static private int[] arr; //存放消除大于比较数后的list中的元素
    static private LinkedList<Integer> tmp = new LinkedList<Integer>(); //存放临时结果
    static boolean sign = false; /*
     * 参数:
     * 1.当前数组下标
     * 2.上一次调用后的和
     * 返回值,当前数
     */
    static void getNearestCom(int nIndex, int sum){
    for(int i = nIndex; i >= 0; ){
    i--;
    if(i >= 0 && sum + arr[i] < comNum){
    tmp.addLast(arr[i]);
    sign = true;
    getNearestCom(i, sum + arr[i]);
    }else{
    if(sign && sum >= dif){
    dif = sum;
    results.clear();
    results.addAll(tmp);
    System.out.println(results + "--------->" + dif);
    sign = false;
    }
    if(i == -1)
    {
    if(!tmp.isEmpty())
    tmp.removeLast();
    }
    }
    }
    }

    static Set search(List<Integer> lists, int max){
    comNum = max;
    //先随便找一个比这个比较数小的数初始化
    iLists.addAll(lists);
    //去掉大于比较数的数
    for(int i = 0; i < iLists.size(); i++){
    if(iLists.get(i) >= comNum){
    iLists.remove(i);
    i--;
    }
    }
    arr = new int[iLists.size()];
    for(int i = 0; i < iLists.size(); i++){
    arr[i] = iLists.get(i);
    }
    dif = arr[0]; //初始化dif
    results.add(arr[0]);
    getNearestCom(arr.length, 0);
    return results;
    }

    public static void main(String[] args) {
    List<Integer> lists = Arrays.asList(new Integer[]{1,2,3,6,7,11,100,200,33,31});
    System.out.println("最后结果是:" + N110821.search(lists, 50));
    }
    }