在有序但含有空的陣列中查詢字串

2021-10-25 07:22:41 字數 886 閱讀 8804

【題目描述】給定乙個字串陣列strs,在strs中有些位置為null,但在不為null的位置上,其字串是按照字典順序由小到大依次出現的。再給定乙個字串str,請返回str在strs**現的最左的位置。

【舉例】

【解答】

為減少演算法的複雜度,利用字串陣列有序的這一條件,盡可能多的使用了二分查詢,過程如下:

1.用變數k記錄str在陣列strs[l…r]中最左的位置,初始時k=-1,l=0,r=strs.length-1;令mid記錄strs[l…r]的中間字串,則mid=(l+r)/ 2。

2.如果strs[mid]不為空,這種情況比較簡單,只需要用compareto()函式按字典順序比較str與strs[mid]的大小:若str.compareto(strs[mid]) > 0,說明str字典順序更大,則l = mid + 1;若str.compareto(strs[mid]) < 0,說明strs[mid]字典順序更大,則r = mid -1;如果二者相等說明找到了str,但不一定是最左的,需要在左半區[l,mid-1]繼續尋找,所以令r=mid-1,然後重複以上步驟。

3.若strs[mid]為空,從mid開始從右向左遍歷左半區,即strs[l…mid],如果整個左半區都為空,則用二分查詢的方式在右半區繼續查詢,即令l=mid+1;如果整個左半區不都為空,則找到第乙個不為空的位置i,將strs[i]與str進行比較,過程與上述類似。

【演算法實現】

public

class

find_str

}else}}

return k;

}

在有序但含有空的陣列中查詢字串

題目 給定乙個字串陣列strs,在strs中有些位置為none,但在不為none的位置上,其字串是按照字典順序由小到大依次出現的。再給定乙個字串s,請返回s在strs 現的最左的位置。舉例 strs none,a none,a none,b none,c s a 返回1 strs none,a no...

在有序但還有空的陣列中查詢字串

題目 思路 這個應該也可以用map的那種吧,不過需要遍歷整個陣列。複雜度是o n 使用二分演算法的話,時間複雜度是o logn 而且這個字元陣列的話還是乙個有序的字元陣列。這個題我自己寫的輸入輸出可能是有些問題,結果不正確。改用直接寫陣列是對的。public static int method st...

在有空字串的有序字串陣列中查詢 有點問題

存在乙個排序後的字串陣列,其中散布著一些空字串。根據使用者輸入的字串進行索引。例如,有序字串陣列。方法1 二分查詢,迭代方式 a a ac ad b ba b input x 0y len a 1 while 1 0 跟二分查詢的 一樣,只不過增加乙個判斷。判斷a item 是否是空串,若是空串,則...