得到最接近的数

woshishei0527 2009-12-24 07:09:15
class Eq {
int id;
int level;
}

public int getEquipId(Vector<Eq> veq, int tLevel) {
int id=0;
......
return id;

}

求的是veq中所有对象的level最接近tLevel的id.

比如,我想求 最接近 35这个数的ID. 有这样一些对象[1,22][2,33][3,44][4,55]
从这些对象中 求出的结果是2.
请问具体算法。

...全文
139 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxzyydy 2009-12-24
  • 打赏
  • 举报
回复
帮忙顶顶,顺便接点分,谢谢
树成 2009-12-24
  • 打赏
  • 举报
回复
你运行不就知道了........
我只是告诉你一个算法
woshishei0527 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 spiniper 的回复:]
将两个数相减得到一些数,然后这些数字的绝对值排序,再得到最小的那个数对应的数。
[/Quote]
public int getEquipId(Vector<Eq> veq, int tLevel) {
int id=0;
int []data = new int[veq.size()];
for(int i=0;i<veq.size();i++){
data[i] = Math.abs(veq.get(i).level - tLevel);
}
int pos =0;
int min = data[0];
for(int n=0;n<data.length;n++){
if(data[n]<min){
min = data[n];
pos = n;
}
}
id = veq.get(pos).id;
return id;

}
是这个意思吗?
Dan1980 2009-12-24
  • 打赏
  • 举报
回复
先依次得到差的绝对值,但不需要排序,只要保存本次的值和相应对象的引用,并和上次求得的该值进行比较,若更小,则用本次的值和对象引用替换上次的,最后得到的那个对象即为所求。算法效率为O(N)。如果只要求出一个对象,则可以在绝对值为0的时候提前终止循环。
树成 2009-12-24
  • 打赏
  • 举报
回复
将两个数相减得到一些数,然后这些数字的绝对值排序,再得到最小的那个数对应的数。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧