【題目】
給定乙個字串陣列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 是否是空串,若是空串,則...