From be925e906012d2caf052fd143ea85851a4603d13 Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Wed, 26 Nov 2025 15:49:58 -0500 Subject: [PATCH] Time: 40 ms (22.41%), Space: 40.9 MB (23.28%) - LeetHub --- .../0334-increasing-triplet-subsequence.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 0334-increasing-triplet-subsequence/0334-increasing-triplet-subsequence.py diff --git a/0334-increasing-triplet-subsequence/0334-increasing-triplet-subsequence.py b/0334-increasing-triplet-subsequence/0334-increasing-triplet-subsequence.py new file mode 100644 index 0000000..259eb8e --- /dev/null +++ b/0334-increasing-triplet-subsequence/0334-increasing-triplet-subsequence.py @@ -0,0 +1,37 @@ +class Solution: + def increasingTriplet(self, nums: List[int]) -> bool: + """ + Complexities: + Time: O(n) + Space: O(n) + + where n = len(nums) + """ + + # Find j candidates (where nums[i] < nums[j]) + # - j is not 0 + # - nums[j] is not min so far + # --- O(n) + jCandidates = [] + minSoFar = nums[0] + for j in range(1, len(nums)): + if nums[j] <= minSoFar: + minSoFar = nums[j] + else: + jCandidates.append(j) + + # Fail fast: 0-1 jCandidates = no increasing tuplet (one j candidate will be k) + if len(jCandidates) <= 1: + return False + + # Find k candidates (where nums[j] < nums[k]) + # - do the same iteration as j but only over j candidates + # --- O(n) + minSoFar = nums[jCandidates[0]] + for kPrime in range(1, len(jCandidates)): + if nums[jCandidates[kPrime]] <= minSoFar: + minSoFar = nums[jCandidates[kPrime]] + else: + return True + + return False \ No newline at end of file