【问题标题】:Finding number position in ranges查找范围内的数字位置
【发布时间】:2016-09-15 14:56:17
【问题描述】:

我正在编写一个函数,它必须在数值范围内找到给定数字的位置,范围是代码中的一个变量,现在假设范围是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 的值并排除非常昂贵的循环。

【问题讨论】:

    标签: numbers range


    【解决方案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 才能得到正确的结果)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多