让我们说我有一个名为ArrL
的数组,由数字5,10,25,33,22,8和11组成。我的函数将取一个数字21,并找到数字是"大于21,最接近21"在这种情况下将是22.我将如何做到这一点?
答案 0 :(得分:1)
因为您的比较列表未排序,您必须检查其中的每个元素。使用二进制搜索可以更有效地完成排序列表,但是列表不是这样。
我们的想法是在您浏览列表时记录最接近但更大的数字,并在找到更好的数字时更新它(仍然比当前保存的数据更大但更接近),类似于此描述性过程:
对于列表中的每个数字N
,请执行以下步骤2到5(包括第2步到第5步)。如果您没有数字,请转到第6步。
如果N
小于或等于您的目标号码,请转到第5步。不感兴趣。
如果尚未设置R
(此N
是您发现的第一个数字大于目标数),请将N
保存为返回值{ {1}},然后转到第5步。
如果R
小于N
,请将R
替换为R
,因为它距离更近。
返回步骤1以获取下一个号码。
如果您已将N
设置为上述步骤中的内容,那就是您想要的值。否则,没有高于目标数的值。
以下伪代码是另一种查看它的方式:
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;
}
}