diff --git a/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_1.py b/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_1.py new file mode 100644 index 0000000..64613b3 --- /dev/null +++ b/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_1.py @@ -0,0 +1,18 @@ +# モジュールを利用 +class Solution: + def searchInsert(self, nums: List[int], target: int) -> int: + return bisect_left(nums, target) + + +# 2分探索を自分で実装 +class Solution: + def searchInsert(self, nums: List[int], target: int) -> int: + left = 0 + right = len(nums) + while left < right: + middle = (left + right) // 2 + if nums[middle] < target: + left = middle + 1 + else: + right = middle + return left diff --git a/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_2.py b/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_2.py new file mode 100644 index 0000000..3d68d40 --- /dev/null +++ b/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_2.py @@ -0,0 +1,14 @@ +# level_1から特に変更なし +# bisectモジュールのソースとも同じ実装 +# https://github.com/python/cpython/blob/3.12/Lib/bisect.py#L74 +class Solution: + def searchInsert(self, nums: List[int], target: int) -> int: + left = 0 + right = len(nums) + while left < right: + middle = (left + right) // 2 + if nums[middle] < target: + left = middle + 1 + else: + right = middle + return left diff --git a/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_3.py b/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_3.py new file mode 100644 index 0000000..d2bcdcf --- /dev/null +++ b/arai60/41-44_Binary_Search/41_35_Search Insert Position/level_3.py @@ -0,0 +1,11 @@ +class Solution: + def searchInsert(self, nums: List[int], target: int) -> int: + left = 0 + right = len(nums) + while left < right: + middle = (left + right) // 2 + if nums[middle] < target: + left = middle + 1 + else: + right = middle + return left