簡體   English   中英

如何通過二進制搜索獲取數組中的最后一個字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM