From 3ed4d6987d0a2316a5a6ddfd451cde2e2b398b23 Mon Sep 17 00:00:00 2001 From: shining-ai Date: Wed, 3 Apr 2024 15:02:24 +0000 Subject: [PATCH] =?UTF-8?q?=E3=80=90Arai60=E3=80=9141=E5=95=8F=E7=9B=AE=20?= =?UTF-8?q?35.=20Search=20Insert=20Position?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../41_35_Search Insert Position/level_1.py | 18 ++++++++++++++++++ .../41_35_Search Insert Position/level_2.py | 14 ++++++++++++++ .../41_35_Search Insert Position/level_3.py | 11 +++++++++++ 3 files changed, 43 insertions(+) create mode 100644 arai60/41-44_Binary_Search/41_35_Search Insert Position/level_1.py create mode 100644 arai60/41-44_Binary_Search/41_35_Search Insert Position/level_2.py create mode 100644 arai60/41-44_Binary_Search/41_35_Search Insert Position/level_3.py 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