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的值请大家贴出 验证过的代码 合适的话结贴可以追加分数
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的值请大家贴出 验证过的代码 合适的话结贴可以追加分数
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));
}
}