/**
* 面试题 10.05. 稀疏数组搜索
* @author wsq
* @date 2020/10/09
稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。
示例1:
输入: words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ta"
输出:-1
说明: 不存在返回-1。
示例2:
输入:words = ["at", "", "", "", "ball", "", "", "car", "", "","dad", "", ""], s = "ball"
输出:4
链接:https://leetcode-cn.com/problems/sparse-array-search-lcci
*/
package search;
public class FindString {
int ans = -1;
/**
* 折中查找 + 递归实现
* @param words
* @param s
* @return
*/
public int findString(String[] words, String s) {
int n = words.length;
int left = 0;
int right = n - 1;
findString(words, s, left, right);
return ans;
}
public void findString(String[] words, String target, int left, int right){
if(ans != -1){
return;
}
if(left > right) {
return;
}
int mid = (left + right) >> 1;
if(words[mid] == target){
ans = mid;
return;
}
if("".equals(words[mid])){
findString(words, target, left, mid - 1);
findString(words, target, mid + 1, right);
}else if(words[mid].compareTo(target) > 0){
findString(words, target, left, mid - 1);
}else{
findString(words, target, mid + 1, right);
}
}
public static void main(String[] args) {
String[] words = {"at", "", "", "", "ball", "", "", "car", "", "", "dad", "", ""};
String s = "ball";
FindString fs = new FindString();
int ans = fs.findString(words, s);
System.out.println(ans);
}
}
面试题 10.05. 稀疏数组搜索(折中查找 + 递归 实现)
稀疏数组搜索算法
最新推荐文章于 2025-05-15 00:45:00 发布
本文介绍了一种在排好序且包含空字符串的数组中搜索指定字符串的方法。通过递归结合二分查找的方式实现了对稀疏数组的有效搜索,并提供了一个具体的Java实现案例。
846

被折叠的 条评论
为什么被折叠?



