Pythonにおけるbisectの使い方説明
6146 ワード
Pythonにおけるbisectの使い方説明
bisectはpython内蔵モジュールで、シーケンスの挿入と検索に使用されます.検索: bisect(array, item) bisect_left(array, item) bisect_right(array, item)
挿入: insort(array,item) insort_left(array,item) insort_right(array,item)
1.検索
出力:
1
3
1,3,3,3,6,8,12,15
**NOTE:**leftとleftを持たない用法の違いは、挿入された要素とシーケンス内の要素が同じである場合、その要素の前(左、left)に挿入されるか、後ろ(右)に挿入されるか、検索される場合、その要素の位置がその要素の後の位置に戻るかである.
2.挿入
bisectを使用insort、bisectより先にどの位置を挿入するかを探して、更にinsert方法で挿入するのがもっと速い方法
[1,4,6,8,12,13,15,20]
3.使用例
Leetcode-315問題の解決策
bisectはpython内蔵モジュールで、シーケンスの挿入と検索に使用されます.
1.検索
import bisect
arr = [1,3,3,6,8,12,15]
value = 3
idx_left=bisect.bisect_left(arr,value)
print(idx_left)
idx_right=bisect.bisect_right(arr,value)
print(idx_right)
# insert
arr.insert(idx_left,value)
print(arr)
出力:
1
3
1,3,3,3,6,8,12,15
**NOTE:**leftとleftを持たない用法の違いは、挿入された要素とシーケンス内の要素が同じである場合、その要素の前(左、left)に挿入されるか、後ろ(右)に挿入されるか、検索される場合、その要素の位置がその要素の後の位置に戻るかである.
2.挿入
bisectを使用insort、bisectより先にどの位置を挿入するかを探して、更にinsert方法で挿入するのがもっと速い方法
import bisect
a = [1,4,6,8,12,15,20]
bisect.insort(a,13)
print(a)
[1,4,6,8,12,13,15,20]
3.使用例
Leetcode-315問題の解決策
class Solution:
def countSmaller(self, nums: List[int]) -> List[int]:
n=len(nums)
result=[0]*n
sorted_nums=[]
for i in range(n-1,-1,-1):
idx = bisect.bisect_left(sorted_nums,nums[i])
sorted_nums.insert(idx,nums[i])
result[i] = idx
return result