- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find Minimum in Rotated Sorted Array II in C++
Suppose we have an array that is sorted, now that is rotated at some pivot. The pivot is not known before. We have to find the minimum element from that array. So if the array is like [4,5,5,5,6,8,2,3,4], then the minimum element is 2.
To solve this, we will follow these steps −
Define one method called search(), this takes arr, low and high
if low = high, then return arr[low]
mid := low + (high – low) / 2
ans := inf
if arr[low] < arr[mid], then ans := min of arr[low] and search(arr, mid, high)
otherwise when arr[high] > arr[mid], then ans := min of arr[mid] and search(arr, low, mid)
otherwise when arr[low] = arr[mid], then ans := min of arr[low] and search(arr, low + 1, high)
otherwise when arr[high] = arr[mid], then ans := min of arr[high] and search(arr, low, high - 1)
return ans
From the main method call solve(nums, 0, size of nums – 1)
Example
Let us see the following implementation to get better understanding −
#include <bits/stdc++.h> using namespace std; class Solution { public: int search(vector <int>& arr, int low, int high){ if(low == high){ return arr[low]; } int mid = low + (high - low) / 2; int ans = INT_MAX; if(arr[low] < arr[mid]){ ans = min(arr[low], search(arr, mid, high)); } else if (arr[high] > arr[mid]){ ans = min(arr[mid], search(arr, low, mid)); } else if(arr[low] == arr[mid]){ ans = min(arr[low], search(arr, low + 1, high)); } else if(arr[high] == arr[mid]){ ans = min(arr[high], search(arr, low, high - 1)); } return ans; } int findMin(vector<int>& nums) { return search(nums, 0, nums.size() - 1); } }; main(){ Solution ob; vector<int> v = {4,5,5,5,6,8,2,3,4}; cout <<(ob.findMin(v)); }
Input
[4,5,5,5,6,8,2,3,4]
Output
2
- Related Articles
- Find Minimum in Rotated Sorted Array in C++
- Search in Rotated Sorted Array II in C++
- Search in Rotated Sorted Array II in Python
- Find the Rotation Count in Rotated Sorted array in C++
- Search in Rotated Sorted Array in Python
- Maximum element in a sorted and rotated array in C++
- Check if an array is sorted and rotated in C++
- C++ program to search an element in a sorted rotated array
- How to find the number of times array is rotated in the sorted array by recursion using C#?
- Check if an array is sorted and rotated in Python
- Finding smallest element in a sorted array which is rotated in JavaScript
- Count rotations in sorted and rotated linked list in C++
- Remove Duplicates from Sorted Array II in C++
- Program to check whether an array Is sorted and rotated in Python
- Count elements less than or equal to a given value in a sorted rotated array in C++
