diff --git a/35/35.md b/35/35.md new file mode 100644 index 0000000..1a1dcca --- /dev/null +++ b/35/35.md @@ -0,0 +1,45 @@ +## 何も見ずに解いてみる + +```cpp +class Solution { +public: + int searchInsert(vector& nums, int target) { + int left = 0; + int right = nums.size(); + while (left < right) { + int mid = left + (right - left) / 2; + if (target > nums[mid]) left = mid + 1; + if (target <= nums[mid]) right = mid; + } + return left; + } +}; +``` + +## 他の人のコードを見てみる + +https://github.com/tokuhirat/LeetCode/pull/41/files +https://github.com/skypenguins/coding-practice/pull/12/files +https://github.com/ryosuketc/leetcode_arai60/pull/30/files +https://github.com/Fuminiton/LeetCode/pull/41/files +https://github.com/takuya576/leetcode/pull/1/files +https://github.com/Ryotaro25/leetcode_first60/pull/45/files + +いろいろなバリエーションで頭の中のシミュレーションを回してみようとすると難しい。。。 +とりあえず「答えとなる数字の下限と上限を閉区間または開区間でとらえる」と「leftとrightがずっと同じままループが回らない」ことだけ意識しておくことにしました。 + +```cpp +class Solution { +public: + int searchInsert(vector& nums, int target) { + int left = 0; + int right = nums.size(); + while (left < right) { + int mid = left + (right - left) / 2; + if (nums[mid] < target) left = mid + 1; + if (nums[mid] >= target) right = mid; + } + return left; + } +}; +```