2016-09-15 99 views
1

我正在寫一個函數,它必須在數字範圍內找到給定數字的位置,範圍是代碼內的一個變量,現在可以說範圍是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; }
所以,正如我所說的這個工程,但我相信這是可以做到更有效地實現,僅使用number2bFonud值和range,並排除非常昂貴的循環。查找範圍內的數字位置

回答

1

如果所有的範圍具有相同的大小並且從0開始,則可以進行簡單的劃分,此外,您還可以通過模運算找到子範圍中的位置。

該過程很簡單,找到您的號碼n的整數除以你的範圍大小,並會給你在哪個子範圍它屬於,找到子範圍內的位置再次找到你的號碼的模數針對範圍大小

這裏是一個例子蟒

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指數,那麼你需要在每個數字中加1來得到正確的結果)