From 39c306d7fe9f9beaa1c27c735be49ee1d8b7b164 Mon Sep 17 00:00:00 2001 From: Yu Nakamura Date: Fri, 1 May 2026 10:41:45 +0900 Subject: [PATCH] add files --- 0035-search-insert-position/memo.md | 11 +++++++++++ 0035-search-insert-position/step1.cpp | 14 ++++++++++++++ 0035-search-insert-position/step2.cpp | 20 ++++++++++++++++++++ 0035-search-insert-position/step3.cpp | 20 ++++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 0035-search-insert-position/memo.md create mode 100644 0035-search-insert-position/step1.cpp create mode 100644 0035-search-insert-position/step2.cpp create mode 100644 0035-search-insert-position/step3.cpp diff --git a/0035-search-insert-position/memo.md b/0035-search-insert-position/memo.md new file mode 100644 index 0000000..a354cbc --- /dev/null +++ b/0035-search-insert-position/memo.md @@ -0,0 +1,11 @@ +### step1 + +findとlower_boundを使ってit != nums.end()のときはそのイテレータ、そうでない場合は配列のサイズを返すようにした。 + +### step2 + +他の方のコード(https://github.com/5ky7/arai60/pull/41/changes#diff-0c860cd754249868513e4f9054206317fa33d0f548fc3896ac2b3e11822fd852R19)を見てみると、lower_bound自体を実装していたので自分も実装してみた。 + +### step3 + +step2を3回通すまで書き直し。 diff --git a/0035-search-insert-position/step1.cpp b/0035-search-insert-position/step1.cpp new file mode 100644 index 0000000..72d5c5d --- /dev/null +++ b/0035-search-insert-position/step1.cpp @@ -0,0 +1,14 @@ +class Solution { +public: + int searchInsert(vector& nums, int target) { + auto it = find(nums.begin(), nums.end(), target); + if (it != nums.end()) { + return it - nums.begin(); + } + auto it2 = lower_bound(nums.begin(), nums.end(), target); + if (it2 != nums.end()) { + return it2 - nums.begin(); + } + return nums.size(); + } +}; diff --git a/0035-search-insert-position/step2.cpp b/0035-search-insert-position/step2.cpp new file mode 100644 index 0000000..34c5cd0 --- /dev/null +++ b/0035-search-insert-position/step2.cpp @@ -0,0 +1,20 @@ +class Solution { +public: + int searchInsert(vector& nums, int target) { + int left = 0; + int right = nums.size(); + + while (left < right) { + int mid = (left + right) / 2; + if (nums[mid] == target) { + return mid; + } + if (nums[mid] < target) { + left = mid + 1; + } else { + right = mid; + } + } + return left; + } +}; diff --git a/0035-search-insert-position/step3.cpp b/0035-search-insert-position/step3.cpp new file mode 100644 index 0000000..34c5cd0 --- /dev/null +++ b/0035-search-insert-position/step3.cpp @@ -0,0 +1,20 @@ +class Solution { +public: + int searchInsert(vector& nums, int target) { + int left = 0; + int right = nums.size(); + + while (left < right) { + int mid = (left + right) / 2; + if (nums[mid] == target) { + return mid; + } + if (nums[mid] < target) { + left = mid + 1; + } else { + right = mid; + } + } + return left; + } +};