我在Java中有一個有序的字符串數組。我試圖找到第一個以該用戶指定的字符串開頭的元素。我首先想到了二分搜索,但它發現相同的字符串不是以用戶指定的字符串開頭的字符串。我應該如何修改二進制搜索,以便我可以實現我想要做的事情?查找以Java中的排序字符串數組中的指定字符串開頭的第一個元素
3
A
回答
6
如果元素不存在(有時被稱爲「您應該插入它的索引」),二進制搜索可以找到「最後元素小於所需元素」。
這樣做的二進制搜索使用這一功能,你可以找到一個元素,並檢查:
- 如果是準確的元素 - 那麼以這個前綴數組中的第一個元素,因爲它是「最小「的元素,並且你已經完成了。
- 如果它不是相同的元素 - 通過增加一個 - 你會得到「最小的元素大於所需的元素」。該元素是數組中第一個具有此前綴的元素(如果該數組有一個)。
此功能非常常見 - 例如它存在於java的Arrays.binarySearch()
中。從javadocs:
返回:搜索鍵的索引,如果它包含在數組中;否則, ( - (插入點) - 1)。插入點被定義爲點 在將鍵插入到數組: 第一個元素除密鑰
從剛發現的指數越大的指數,它是很容易找到的需要的元件。
代碼卡:
String[] arr = { "aa" , "bb","c", "cc" , "ccc", "cccc", "ddD" };
int idx = Arrays.binarySearch(arr, "c");
if (idx < 0)
System.out.println(arr[-1 * idx - 1]);
else System.out.println(arr[idx]);
相關問題
- 1. 如何查找以排序的ArrayList中的子字符串開頭的元素?
- 2. 查找數組字符串中的第一個字符
- 3. 根據字符串中的第一個字符查找字符串列表中第一次出現的元素
- 4. 查找第一個空元素在一個字符串數組
- 5. 查找未排序字符串數組的不同元素
- 6. 找到字符串開頭的字符串數組內的PHP
- 7. 查找以字符串AS3開頭的字符串
- 8. 在字符串中查找字符串的第一個實例
- 9. 查找字符串數組中的Java
- 10. Haskell:找出Data.Set中的元素是否以字符串開頭?
- 11. 在java中排序的字符串數組中搜索給定的字符串
- 12. 如何排序的第一個元素(字符串)字母[PYTHON]
- 13. 查找字符串數組中的字符串的一部分
- 14. 查找字符串中的第一個字母和第一個元音java
- 15. java中的字符串數組與第三個元素
- 16. 查找以字符串開頭的數據框列中的所有元素
- 17. 從字符串值中查找特定的字符串數組
- 18. 在字符串中找到一個數組中的字符串
- 19. 查找字符串特定數組中的元素
- 20. 字符串分割到一個字符串數組的元素
- 21. 獲取從數組列表中指定字符串開頭的所有元素
- 22. 檢查字符串是否以另一個字符串開頭?
- 23. 搜索以字符串數組中的字母開頭的元素
- 24. 僅從java中的字符串數組中排序數字元素?
- 25. 查找字符串的二維數組中的字符串數
- 26. 查找以另一個字符串開頭的字符串中的所有命名組發生
- 27. 查找TreeSet中以給定前綴開頭的字符串
- 28. 需要對給定的字符串進行排序(字符串以x開頭)
- 29. 查找字符串中的指定字符的所有指標
- 30. 查找分隔字符串中的第n個字符串
安置自己的二進制搜索代碼 – Alexander
是的,查一下就能/應該是二進制文件。向我們展示您的代碼,搜索「範圍」有時很複雜 – Bergi
我在標準庫中使用Arrays.binarySearch()方法。 – ipman