From 2682a1e9a68309dec82d78fdad0ad0639ae7e03c Mon Sep 17 00:00:00 2001 From: Riya Singh Date: Sat, 26 Oct 2024 23:18:09 +0530 Subject: [PATCH 1/2] Added Search in rotated sorted array in cpp --- C++/Search_in_rotated_sorted_array | 96 ++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 C++/Search_in_rotated_sorted_array diff --git a/C++/Search_in_rotated_sorted_array b/C++/Search_in_rotated_sorted_array new file mode 100644 index 0000000..2de1373 --- /dev/null +++ b/C++/Search_in_rotated_sorted_array @@ -0,0 +1,96 @@ +#include +using namespace std; + +class Solution { +public: + int search(vector& nums, int target) { + int n = nums.size(); + + // Edge case: if the array has only two elements + if (n == 2) { + if (target == nums[0]) return 0; + else if (target == nums[1]) return 1; + else return -1; + } + + // Find the pivot point where the rotation happens + int lo = 0; + int hi = n - 1; + int pivot = -1; + + while (lo <= hi) { + int mid = lo + (hi - lo) / 2; + + // Check if we are at the beginning or end of the array + if (mid == 0) lo = mid + 1; + else if (mid == n - 1) hi = mid - 1; + + // Check if mid is the pivot point + else if (nums[mid] < nums[mid + 1] && nums[mid] < nums[mid - 1]) { + pivot = mid; + break; + } + else if (nums[mid] > nums[mid + 1] && nums[mid] > nums[mid - 1]) { + pivot = mid + 1; + break; + } + + // Adjust the search range + else if (nums[mid] > nums[hi]) { + lo = mid + 1; + } else { + hi = mid - 1; + } + } + + // If no pivot was found, perform normal binary search + if (pivot == -1) { + lo = 0; + hi = n - 1; + while (lo <= hi) { + int mid = lo + (hi - lo) / 2; + if (nums[mid] == target) { + return mid; + } else if (nums[mid] > target) { + hi = mid - 1; + } else { + lo = mid + 1; + } + } + return -1; + } + + // Binary search in the left half + if (target >= nums[0] && target <= nums[pivot - 1]) { + lo = 0; + hi = pivot - 1; + while (lo <= hi) { + int mid = lo + (hi - lo) / 2; + if (nums[mid] == target) { + return mid; + } else if (nums[mid] > target) { + hi = mid - 1; + } else { + lo = mid + 1; + } + } + } + // Binary search in the right half + else { + lo = pivot; + hi = n - 1; + while (lo <= hi) { + int mid = lo + (hi - lo) / 2; + if (nums[mid] == target) { + return mid; + } else if (nums[mid] > target) { + hi = mid - 1; + } else { + lo = mid + 1; + } + } + } + + return -1; + } +}; From b4bd7870f7c5919296528716e52dbd8239cb4a32 Mon Sep 17 00:00:00 2001 From: Riya Singh Date: Sat, 26 Oct 2024 23:42:36 +0530 Subject: [PATCH 2/2] Add search in rotated sorted array in cpp --- ..._array => Search_in_rotated_sorted_array.cpp} | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) rename C++/{Search_in_rotated_sorted_array => Search_in_rotated_sorted_array.cpp} (87%) diff --git a/C++/Search_in_rotated_sorted_array b/C++/Search_in_rotated_sorted_array.cpp similarity index 87% rename from C++/Search_in_rotated_sorted_array rename to C++/Search_in_rotated_sorted_array.cpp index 2de1373..85a75c1 100644 --- a/C++/Search_in_rotated_sorted_array +++ b/C++/Search_in_rotated_sorted_array.cpp @@ -1,3 +1,4 @@ +#include #include using namespace std; @@ -94,3 +95,18 @@ class Solution { return -1; } }; + +int main() { + Solution sol; + vector nums = {4, 5, 6, 7, 0, 1, 2}; + int target = 0; + + int result = sol.search(nums, target); + if (result != -1) { + cout << "Target " << target << " found at index: " << result << endl; + } else { + cout << "Target " << target << " not found in the array." << endl; + } + + return 0; +}