From f1f681ccb8c954f5697d7ce44b527b0ab6705da5 Mon Sep 17 00:00:00 2001 From: Youngsang Suh <60172447+youngsangsuh@users.noreply.github.com> Date: Fri, 26 May 2023 15:47:00 -0700 Subject: [PATCH 1/2] Create solution.cpp --- Leetcode/34/ysuh/solution.cpp | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Leetcode/34/ysuh/solution.cpp diff --git a/Leetcode/34/ysuh/solution.cpp b/Leetcode/34/ysuh/solution.cpp new file mode 100644 index 0000000..5073011 --- /dev/null +++ b/Leetcode/34/ysuh/solution.cpp @@ -0,0 +1,49 @@ +class Solution { +public: + vector binarySearch(vector& nums, int target, int start, int end) { + while (start <= end) { + int mid = (start + end) / 2; + if (nums[mid] == target) { + return {findLeft(nums, target, start, mid-1), findRight(nums, target, mid+1, end)}; + } else if (nums[mid] > target) { + end = mid - 1; + } else { + start = mid + 1; + } + } + return {-1, -1}; + } + + int findLeft(vector& nums, int target, int start, int end) { + while (start <= end) { + int mid = (start + end) / 2; + if (nums[mid] == target) { + return findLeft(nums, target, start, mid-1); + } else if (nums[mid] > target) { + end = mid - 1; + } else { + start = mid + 1; + } + } + return end + 1; + } + + int findRight(vector& nums, int target, int start, int end) { + while (start <= end) { + int mid = (start + end) / 2; + if (nums[mid] == target) { + return findRight(nums, target, mid+1, end); + } else if (nums[mid] > target) { + end = mid - 1; + } else { + start = mid + 1; + } + } + return start - 1; + } + + vector searchRange(vector& nums, int target) { + if (!nums.size()) return {-1, -1}; + return binarySearch(nums, target, 0, nums.size()-1); + } +}; From 91b38514a1397f102e017046d27fcc228eefd85e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 26 May 2023 22:48:46 +0000 Subject: [PATCH 2/2] Add README.md file --- Leetcode/34/ysuh/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Leetcode/34/ysuh/README.md diff --git a/Leetcode/34/ysuh/README.md b/Leetcode/34/ysuh/README.md new file mode 100644 index 0000000..726f807 --- /dev/null +++ b/Leetcode/34/ysuh/README.md @@ -0,0 +1,11 @@ +## Link +[Find First and Last Position of Element in Sorted Array](https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/description/) + +## Topic +binary search + +## Approach +find the target via binary search +find the left and right via binary recursive search + +## Note