[英]How to get the last char in an array with a binary search
我的老師寫了一種算法來查找數組中的數字。 我試圖將其轉換為char
。
如果我搜索數組的第一個char
,它會起作用,但是,如果我嘗試在同一數組中找到最后一個char
,它將給我0或一個意外的數字(如100+,則該數組像4個char
)。
這是代碼:
int myIndex = binarySearch(sentence , word[0], 0, sentence.length -1);
char [] sentence = {'s','t','a','c','k','o','v','e','r','f','l','o','w'};
char [] word = {'o','v','e','r'};
static int binarySearch(char [] arr, char x, int l, int r){
if(r<l){
return 0;
}
int m = l+(r-l)/2;
if(arr[m] == x){
return m;
}
if(arr[m] < x){
return binarySearch(arr, x, m+1, r);
}
return binarySearch(arr, x, l, m-1);
}
如果我在word
數組中搜索第一個字母,它可以正常工作,但是,如果我在word
數組中搜索最后一個字母,它將中斷。
您正在對chars的未排序的輸入數組arr
使用二進制搜索。 因此,您必須首先對數組進行排序或對未排序的數組進行線性搜索。
您需要排序數組才能執行二進制搜索。
為了這,
在調用搜索方法之前添加以下行: Arrays.sort(sentence);
您正在使用的二進制搜索僅適用於排序數組,此外,您的代碼是正確的
您應該首先對數組進行如下排序:(通過導入java數組)
import java.util.Arrays;
Arrays.sort(array_of_chars);
這將無需排序數組即可工作。 你可以試一下嗎
int myIndex = binarySearch(sentence , 'w');
static int binarySearch(char[] arr, char x)
{
int l = 0, r = arr.length - 1;
while (l <= r) {
int m = l + (r - l) / 2;
int res = String.valueOf(x).compareTo(String.valueOf(arr[m]));
// Check if x is present at mid
if (res == 0)
return m;
// If x greater, ignore left half
if (res > 0)
l = m + 1;
// If x is smaller, ignore right half
else
r = m - 1;
}
return -1;
}
為了使二進制搜索有效,請首先對數組進行排序 。
//import utility class
import java.util.Arrays;
//Make use of sort function to sort the array
Arrays.sort(sentence);
//Call binary search now
int myIndex = binarySearch(sentence , word[0], 0, sentence.length -1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.