查找数组中最接近给定数字的最大数字

时间:2013-02-11 08:38:21

标签: java

让我们说我有一个名为ArrL的数组,由数字5,10,25,33,22,8和11组成。我的函数将取一个数字21,并找到数字是"大于21,最接近21"在这种情况下将是22.我将如何做到这一点?

4 个答案:

答案 0 :(得分:1)

因为您的比较列表未排序,您必须检查其中的每个元素。使用二进制搜索可以更有效地完成排序列表,但是列表不是这样。

我们的想法是在您浏览列表时记录最接近但更大的数字,并在找到更好的数字时更新它(仍然比当前保存的数据更大但更接近),类似于此描述性过程:

  1. 对于列表中的每个数字N,请执行以下步骤2到5(包括第2步到第5步)。如果您没有数字,请转到第6步。

  2. 如果N小于或等于您的目标号码,请转到第5步。不感兴趣。

  3. 如果尚未设置R(此N是您发现的第一个数字大于目标数),请将N保存为返回值{ {1}},然后转到第5步。

  4. 如果R小于N,请将R替换为R,因为它距离更近。

  5. 返回步骤1以获取下一个号码。

  6. 如果您已将N设置为上述步骤中的内容,那就是您想要的值。否则,没有高于目标数的值。

  7. 以下伪代码是另一种查看它的方式:

    R

    而且,作为概念的证明,Python代码:

    def greaterButClosest (list, find):
    
      found = -1                         # Initially none.
    
      for idx = 0 to list.length:        # Check all indexes.
    
        if list[idx] > find:             # Only consider those higher.
    
          if found == -1:                # First one automatically closest.
            found = idx
          else:
            if list[idx] < list[found]:  # Otherwise, closer if less than current.
              found = idx
    
      if found == -1:                    # Some sentinel if none found.
        return -99999
    
      return list[found]                 # Otherwise return it.
    

    输出:

    def greaterButClosest (list, find):
        found = -1
        for idx in range (len(list)):
            if list[idx] > find:                   # < for opposite case.
                if found == -1:
                    found = idx
                else:
                    if list[idx] < list[found]:    # > for opposite case.
                        found = idx
    
        # <- Note indent level, this is OUTSIDE the for loop.
        if found == -1:
            return -99999
        return list[found]
    
    for tst in [7, 8, 9, 10, 11, 99]:
        print "%2d: %2d"%(tst, greaterButClosest ([5, 10, 25, 33, 22, 8, 11], tst))
    

答案 1 :(得分:1)

你可以这样走

    // To find Closest Number
    NavigableSet<Integer> values = new TreeSet<Integer>();
    for (int x : listOfNum) { values.add(x); }
    int lower = values.floor(number);
    int higher = values.ceiling(number);

答案 2 :(得分:0)

迭代数组,存储最接近数字和位置的数据。如果它更接近更新这些值。

答案 3 :(得分:0)

您可以遵循以下几个步骤, 1.按升序排序数组 2.对阵列执行线性搜索,以便显示大于所选数字的第一个数字,并且它会跳出循环。 对于排序数组:

for(int i=0;i<ArrL.length;i++){
if(ArrL[i]>selected_no){
    System.out.println("The closest greater number is'+ArrL[i]);
            break;
     }

}