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

2021-10-03 08:15:24 字數 1953 閱讀 4821

【題目】

給定乙個字串陣列strs, 在strs中有些位置為none, 但在不為none的位置上, 其字串是按照字典順序由小到大依次出現的。

再給定乙個字串s, 請返回s在strs**現的最左的位置。

【舉例】

strs=[none, 「a」, none, 「a」, none, 「b」, none, 「c」], s=「a」, 返回1;

strs=[none, 「a」, none, 「a」, none, 「b」, none, 「c」], s=none, 只要s為none, 就返回-1;

strs=[none, 「a」, none, 「a」, none, 「b」, none, 「c」], s=「d」, 返回-1;

盡量使用二分法查詢

遇見none向左遍歷直至遇到非none

匹配到s,將索引儲存在res中,繼續向左二分。

因為要獲取s在strs出現的最左位置,此時匹配可能不是最左的結果。

# 有序含空陣列查詢字串

defindex_of_none_strs

(arr, s)

:if s is

none

:return-1

left =

0 right =

len(arr)-1

res =-1

while left <= right:

mid =

(left + right)//2

if arr[mid]

== s:

res = mid

right = mid +

1elif arr[mid]

isnone

: index = mid

while arr[index]

isnone

: index -=

1if arr[index]

== s:

res = index

right = index -

1elif arr[index]

< s:

left = mid +

1else

: right = index -

1elif arr[mid]

< s:

left = mid +

1elif arr[mid]

> s:

right = mid -

1return res

# 簡單測試

if __name__ ==

'__main__'

: strs =

[none

,"a"

,none

,"a"

,none

,"b"

,none

,"c"

] s =

"a"print

(index_of_none_strs(strs, s)

)# 1

strs =

[none

,"a"

,none

,"a"

,none

,"b"

,none

,"c"

] s =

none

print

(index_of_none_strs(strs, s)

)# -1

strs =

[none

,"a"

,none

,"a"

,none

,"b"

,none

,"c"

] s =

"d"print

(index_of_none_strs(strs, s)

)# -1

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

題目描述 給定乙個字串陣列strs,在strs中有些位置為null,但在不為null的位置上,其字串是按照字典順序由小到大依次出現的。再給定乙個字串str,請返回str在strs 現的最左的位置。舉例 解答 為減少演算法的複雜度,利用字串陣列有序的這一條件,盡可能多的使用了二分查詢,過程如下 1.用...

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

題目 思路 這個應該也可以用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 是否是空串,若是空串,則...