diff --git a/35-search-insert-position/.DS_Store b/35-search-insert-position/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/35-search-insert-position/.DS_Store differ diff --git a/35-search-insert-position/problem.md b/35-search-insert-position/problem.md new file mode 100644 index 0000000..914a46a --- /dev/null +++ b/35-search-insert-position/problem.md @@ -0,0 +1 @@ +## 問題: [35. Search Insert Position](https://leetcode.com/problems/search-insert-position/description/) diff --git a/35-search-insert-position/step1.md b/35-search-insert-position/step1.md new file mode 100644 index 0000000..0642d1f --- /dev/null +++ b/35-search-insert-position/step1.md @@ -0,0 +1,22 @@ +# Step 1 + +- 二分探索で解く + +```python +class Solution: + def searchInsert(self, nums: List[int], target: int) -> int: + start_index, end_index = 0, len(nums) - 1 + while start_index <= end_index: + middle_index = (start_index + end_index) // 2 + if nums[middle_index] == target: + return middle_index + elif nums[middle_index] < target: + start_index = middle_index + 1 + else: + end_index = middle_index - 1 + return start_index +``` + +時間計算量: $O(\log n)$ + +空間計算量: $O(1)$ diff --git a/35-search-insert-position/step2.md b/35-search-insert-position/step2.md new file mode 100644 index 0000000..3253422 --- /dev/null +++ b/35-search-insert-position/step2.md @@ -0,0 +1,16 @@ +# Step 2 + +```python +class Solution: + def searchInsert(self, nums: List[int], target: int) -> int: + start, end = 0, len(nums) - 1 + while start <= end: + middle = start + (end - start) // 2 + if nums[middle] == target: + return middle + elif nums[middle] < target: + start = middle + 1 + else: + end = middle - 1 + return start +``` diff --git a/35-search-insert-position/step3.md b/35-search-insert-position/step3.md new file mode 100644 index 0000000..165e764 --- /dev/null +++ b/35-search-insert-position/step3.md @@ -0,0 +1,22 @@ +# Step 3 + +```python +class Solution: + def searchInsert(self, nums: List[int], target: int) -> int: + start, end = 0, len(nums) - 1 + while start <= end: + middle = start + (end - start) // 2 + if nums[middle] == target: + return middle + elif nums[middle] > target: + end = middle - 1 + else: + start = middle + 1 + return start +``` + +1回目: 1分 31秒 + +2回目: 1分 26秒 + +3回目: 1分 27秒