在随机集中查找最接近的数字

And*_*obs 4 algorithm math set

假设我在0到100之间有一组10个随机数.

操作员还给我一个介于0和100之间的随机数.然后我找到了集合中与操作员给我的数字最接近的数字.

set = {1,10,34,39,69,89,94,96,98,100}

操作员编号= 45

return = 39

如何将其转换为代码?(javascript或其他)

Cha*_*ana 7

如果set是有序的,则进行二分查找以找到最接近的值(或2个值).然后区分哪两个最接近...减去?

如果set没有被排序,只需遍历集合,(排序它本身需要多次传递),并且对于每个成员,检查差异是否小于您到目前为止看到的最小差异,如果它是,将其记录为新的最小差异,并将该数字记录为新的候选答案..

  public int FindClosest(int targetVal, int[] set)
  {
      int dif = 100, cand = 0;
      foreach(int x in set)
          if (Math.Abs(x-targetVal) < dif)
          {
              dif = Math.Abs(x-targetVal);
              cand = x;
          }
      return cand;
  }
Run Code Online (Sandbox Code Playgroud)


dfa*_*dfa 6

  • 给定一个调用的数组input,创建另一个相同大小的数组
  • 这个新数组的每个元素都是 Math.abs(input[i] - operatorNumber)
  • 选择mininum元素的索引(让我们称之为k)
  • 你的答案是 input[k]

NB

  • 不需要排序
  • 没有额外的阵列你可以做到这一点

JavaScript中的示例实现

function closestTo(number, set) {
    var closest = set[0];
    var prev = Math.abs(set[0] - number);

    for (var i = 1; i < set.length; i++) {
        var diff = Math.abs(set[i] - number);

        if (diff < prev) {
            prev = diff;
            closest = set[i];
        }
    }

    return closest;
}
Run Code Online (Sandbox Code Playgroud)