@girikuncoro I noticed that the solution doesn't keep track of the elements in the subsequence properly: e.g. if you have the array [5,1,5,5,0,8], the function returns true, but has first = 0, second=5, third = 8. first doesn't really represent the first value in the subsequence, rather the min value in the array. But it works out because second represents a value that is greater than some other value preceding it (in this case, 1). My proposal to keep track of the actual subsequence is below (I tested it out with a few cases, and it works so far):

def increasingTriplet(self,nums):
first = second = secondMin = float('inf')
for n in nums:
if n <= first:
if second < float('inf'):
secondMin = first
first = n
elif n <= second:
second = n
else:
secondMin = first if secondMin == float('inf') else secondMin
print "first: {}, second: {}, third: {}".format(secondMin, second, n)
return True
return False