Given an unsorted array return whether a increasing subsequence of length 3 exists or not in the array.
Formally the function should:
Return True if there exists
I, J, K
such that
Arr[i] <
arr[j] <
arr[k] given 0≤
i <
J <
k ≤
n-1 else return false.
Your algorithm should run in O (n) time complexity and O (1) space complexity.
Examples:
Given [1, 2, 3, 4, 5] ,
Return true .
Given [5, 4, 3, 2, 1] ,
Return false .
Credits:
Special thanks to @DjangoUnchained for adding this problem and creating all test cases.
Hide Similar Problems(M) longest increasing subsequenceSoluion1:
Public classSolution { Public BooleanIncreasingtriplet (int[] nums) { intsmall = integer.max_value, big =Integer.max_value; for(intn:nums) { if(N <=small) Small=N; Else if(N <=big) Big=N; Else return true; } return false; }}
Solution2:
Public classSolution { Public BooleanIncreasingtriplet (int[] nums) { intMin =Integer.max_value; intMID =Integer.max_value; intAltmin =Integer.max_value; for(inti = 0; i<nums.length; ++i) {if(nums[i]<min) { if(Mid = = Integer.max_value)//If mid val hasn ' t been setMin =Nums[i]; Else if(Altmin < nums[i])//If in (altermin, min), reset Min & Mid{min=altmin; Mid=Nums[i]; Altmin=Integer.max_value; } Else if(Nums[i] < altmin)//Update the alternative min, which is less than Min.Altmin =Nums[i]; } Else if(nums[i]<mid) {if(Nums[i] > Altmin)//If in (Altermin, mid), reset Min & mid{min=altmin; Mid=Nums[i]; Altmin=Integer.max_value; } Else if(Nums[i] >min) Mid= Nums[i];//Reset Mid If Altermin is not set. } Else if(nums[i]>mid) {return true; } } return false; }}
334. Increasing Triplet subsequence