Maximum Unsorted Subarray
Problem Description
Given an array A of non-negative integers of size N. Find the minimum sub-array Al, Al+1 ,..., Ar such that if we sort(in ascending order) that sub-array, then the whole array should get sorted. If A is already sorted, output -1.
Problem Constraints
1 <= N <= 1000000
1 <= A[i] <= 1000000
Input Format
First and only argument is an array of non-negative integers of size N.
Output Format
Return an array of length two where the first element denotes the starting index(0-based) and the second element denotes the ending index(0-based) of the sub-array. If the array is already sorted, return an array containing only one element i.e. -1.
Example Input
Input 1:
A = [1, 3, 2, 4, 5]
Input 2:
A = [1, 2, 3, 4, 5]
Example Output
Output 1:
[1, 2]
Output 2:
[-1]
Example Explanation
Explanation 1:
If we sort the sub-array A1, A2, then the whole array A gets sorted.
Explanation 2:
A is already sorted.
bool helper(vector<int>&v,int i){int x=v[i];if(i==0)return x>v[1];else if(i==v.size()-1)return x<v[i-1];return x>v[i+1] || x<v[i-1];}vector<int> Solution::subUnsort(vector<int> &v) {if(v.size()<2)return {-1};int st,end;vector<int>ans;int smallest=INT_MAX,largest=INT_MIN;for(int i=0; i<v.size(); i++){if(helper(v,i)){smallest=min(smallest,v[i]);largest=max(largest,v[i]);}}if(smallest==INT_MAX)return {-1};int left=0,right=v.size()-1;while(smallest>=v[left])left++;while(largest<=v[right])right--;return {left,right};}
0 Comments
If you have any doubts/suggestion/any query or want to improve this article, you can comment down below and let me know. Will reply to you soon.