[英]Finding surrounding numbers in array (java)
我的問題與斐波那契數列有關(但為簡單起見,您可以將其應用於平方/素數等)
long f1 = 0;
long f2 = 1;
long fibonacci = 0;
long[] fibonaccinumbers = new long[52];
fibonaccinumbers[0]=0;
fibonaccinumbers[1]=1;
for(int count = 2; count<=51; count++)
{
fibonacci = f2+f1;
fibonaccinumbers[count] = fibonacci;
f1 = f2;
f2 = fibonacci;
}
上面的代碼生成斐波那契數字0-51的數組。
現在我要輸入的是數字,我們以30為例。 然后找到並顯示序列前后的數字,分別是21和34。
使我不寒而栗的是,進入數組並在給定數字的上方和下方搜索以找到匹配項。 我該怎么辦?
由於Fibonaccy系列是排序數組(具有升序),因此可以使用int index = Arrays.binarySearch(fibonaccinumbers,30);
獲取索引,使fibonaccinumbers[index-1] < 30 < fibonaccinumbers[index]
。
因此, fibonaccinumbers[index-1]
將包含21,而fibonaccinumbers[index]
將包含34。
請注意,如果數組中的所有數字均小於要搜索的數字,則Arrays.binarySearch
將返回fibonaccinumbers.length
。
這應該非常簡單,您只需要訪問輸入索引的+1和-1處的數組,例如,如果用戶輸入30 ...
System.out.println("BEFORE: " + fibonaccinumbers[input-1]);
System.out.println("AFTER: " + fibonaccinumbers[input+1]);
輸入是用戶輸入的內容,因此在這種情況下,input-1將為29。
只要確保輸入1和輸入1不會超出數組的范圍即可。
如果您想找出實際的斐波那契編號與其序列中的編號相對應,則需要先搜索該編號,然后再次使用找到的索引來查找之前和之后的編號。
如果您不想使用Arrays
類提供的二進制搜索,則可以簡單地遍歷數組並檢查所需的值。 您只需要一個int
值即可指示數組中的索引。
public static void main(String[] args) {
long[] fibs = createFib();
long search = 30;
int small = 0;
for(long i : fibs) {
if(i < search) {
++small;
} else {
break;
}
}
if(small < fibs.length)
System.out.println(fibs[small-1] + " and " + fibs[small] + " do surround the value " + search);
else {
System.out.println(" the value " + search +" is to high, only " + fibs[small-1] + " is in range");
}
}
private static long[] createFib() {
long f1 = 0;
long f2 = 1;
long fibonacci = 0;
long[] fibonaccinumbers = new long[52];
fibonaccinumbers[0]=0;
fibonaccinumbers[1]=1;
for(int count = 2; count<=51; count++)
{
fibonacci = f2+f1;
fibonaccinumbers[count] = fibonacci;
f1 = f2;
f2 = fibonacci;
}
return fibonaccinumbers;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.