others - Java - 在二进制数组的搜索中,如何获取最后一个字符

我的老师写了一个算法来查找数组中的数字,我试图把它转换为char

如果我搜索数组的第一个char,它可以工作,但是如果我试图找到同一个数组中的最后一个char,它会给我0.

下面是代码:


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);


}



时间:

你正在对字符arr的输入数组使用二进制搜索,这些字符未排序,因此,你必须首先对数组排序,或者对未排序数组使用线性搜索。

你需要有一个排序数组来进行二进制搜索。

在调用搜索方法之前添加此行: Arrays.sort(sentence);

这可以在没有排序数组的情况下工作。 试试这个


 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; 


 } 



你应该首先对数组进行排序,如下所示: (通过导入java数组)


import java.util.Arrays; 



Arrays.sort(array_of_chars); 



...