查找范围中的数字位置

时间:2016-09-15 14:56:18

标签: numbers range

我正在编写一个函数,必须在数值范围内找到给定数字的位置,范围是代码中的变量,现在可以说范围是4所以范围看起来像以下: [ 0-3 ] [ 4-7 ] [ 8-11 ] [ 12-15 ] [ 16-19 ] [ 20-23 ] [ 24-27 ]
我想要实现的是以最快的方式找到给定数字所属的范围,因为此操作在数百万个事件中执行。 所以我到目前为止所写的,并且工作正常,如下:
public String findRange(int range,int number2bFound) { int base = 0; if (number2bFound == 0) number2bFound = 1.0; int higher = 0; while (base <= number2bFound) { higher = base + (range - 1); if ((base <= number2bFound) && (higher >= number2bFound)) return base + "-" + higher; base += range; } return null; }
正如我所说的那样有效,但我确信只需使用number2bFonudrange的值并排除非常昂贵的循环,就可以更有效地实现这一点。

1 个答案:

答案 0 :(得分:1)

如果所有范围都具有相同的大小且从0开始,则会进行简单的除法,另外您可以使用模运算找到子范围内的位置。

程序很简单,找到你的数字n的整数除以你的范围大小,这将给你它所属的子范围,找到子范围内的位置找到模数您的号码再次与范围大小

这是一个示例python

def find_position(n,size):
    return (n//size, n%size)

范围为4

>>> test=[ [0,1,2,3], [4,5,6,7], [8,9,10,11], [12,13,14,15], [16,17,18,19], [20,21,22,23] ]
>>> find_position(6,4)
(1, 2)
>>> test[1][2]
6
>>> find_position(11,4)
(2, 3)
>>> test[2][3]
11
>>>

范围为5

>>> test=[ [0,1,2,3,4], [5,6,7,8,9] ,[10,11,12,13,14],[15,16,17,18,19],  [20,21,22,23,24] ]
>>> find_position(11,5)
(2, 1)
>>> test[2][1]
11
>>> 

程序如下,让Size为每个子范围的大小,并n您想要找到的数字,那么您只需要获取您想要的数字n找到。

将其转换为java应该非常简单,请原谅,如果我有点生疏,但我认为是这样的

public String findRange(int range,int number2bFound){
    int sub_ran_pos, pos;
    sub_ran_pos = (int) number2bFound/range;    //or however the integer division is in java
    pos = number2bFound % range;                //or however the modulo operation it is in java
    return sub_ran_pos + "-" + pos;             //or the appropriate return type, for this
}

(我不记得了,但如果java是1-index,那么你需要为每个数字加1才能得到正确的结果)