首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在数组中查找最接近的数字

在数组中查找最接近的数字
EN

Stack Overflow用户
提问于 2009-02-06 10:58:20
回答 11查看 26.2K关注 0票数 12

在一个数组中,我们首先要找出其中是否存在一个所需的数字?如果不是,那么我如何在Java中找到更接近给定期望数字的数字呢?

EN

回答 11

Stack Overflow用户

发布于 2009-02-06 11:07:43

一个想法:

代码语言:javascript
代码运行次数:0
运行
复制
int nearest = -1;
int bestDistanceFoundYet = Integer.MAX_INTEGER;
// We iterate on the array...
for (int i = 0; i < array.length; i++) {
  // if we found the desired number, we return it.
  if (array[i] == desiredNumber) {
    return array[i];
  } else {
    // else, we consider the difference between the desired number and the current number in the array.
    int d = Math.abs(desiredNumber - array[i]);
    if (d < bestDistanceFoundYet) {
      // For the moment, this value is the nearest to the desired number...
      bestDistanceFoundYet = d; // Assign new best distance...
      nearest = array[i];
    }
  }
}
return nearest;
票数 12
EN

Stack Overflow用户

发布于 2009-02-06 13:04:11

“更近”的另一个常见定义是基于差异的平方。该大纲类似于romaintaz提供的大纲,不同之处在于您要计算

代码语言:javascript
代码运行次数:0
运行
复制
long d = ((long)desiredNumber - array[i]);

然后将(d * d)与最近的距离进行比较。

请注意,我键入d作为long而不是int是为了避免溢出,即使使用基于绝对值的计算也可能发生溢出。(例如,考虑当desiredValue至少是最大32位有符号值的一半,并且数组包含一个具有相应大小但负号的值时,会发生什么情况。)

最后,我会编写方法来返回值的索引,而不是返回值本身。在这两种情况中的任何一种:

如果数组的长度为零,则返回

  • ;如果您添加了一个限制要视为匹配的最大差值的“

”参数,则返回

indexOf上的等级库类似,您可以使用-1作为带外值。

票数 3
EN

Stack Overflow用户

发布于 2014-09-26 17:44:13

//这样就可以了

代码语言:javascript
代码运行次数:0
运行
复制
public int nearest(int of, List<Integer> in)
{
int min = Integer.MAX_VALUE;
int closest = of;

for (int v : in) 
{
    final int diff = Math.abs(v - of);

    if (diff < min) 
    {
        min = diff;
        closest = v;
    }
}
return closest;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/519881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档