Increasing Triplet Subsequence
Given an integer array nums, return true if there exists a triple of indices (i, j, k) such that i < j < k and nums[i] < nums[j] < nums[k]. If no such indices exists, return false.
Example 1:
Input: nums = [1,2,3,4,5]
Output: true
Explanation: Any triplet where i < j < k is valid.
Example 2:
Input: nums = [5,4,3,2,1]
Output: false
Explanation: No triplet exists.
Example 3:
Input: nums = [2,1,5,0,4,6]
Output: true
Explanation: The triplet (3, 4, 5) is valid because nums[3] == 0 < nums[4] == 4 < nums[5] == 6.
Brute Force : Failed for some testcase
class Solution {
public boolean increasingTriplet(int[] nums) {
int n=nums.length;
int i=0;
int j=i+1;
int k=j+1;
while(i <n && j<n && k<n)
{
if(nums[i]<nums[j] &&i<j)
{
if(nums[j]<nums[k] && j <k)
{
return true;
}
else
{
i++;
j++;
k++;
}
}
else
{
i++;
j++;
k++;
}
}
return false;
}
}
GreedyApproach
class Solution {
public boolean increasingTriplet(int[] nums) {
int first = Integer.MAX_VALUE;
int second = Integer.MAX_VALUE;
for (int num : nums) {
if (num <= first) {
first = num; // new smallest
} else if (num <= second) {
second = num; // new second smallest
} else {
return true; // num > first and num > second
}
}
return false;
}
}
Comments
Post a Comment