Bird
Raised Fist0
DSA C++programming~5 mins

Three Sum Problem All Unique Triplets in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the goal of the Three Sum Problem?
To find all unique triplets in an array that add up to zero.
Click to reveal answer
beginner
Why do we sort the array before solving the Three Sum Problem?
Sorting helps to avoid duplicates easily and allows using two pointers to find pairs efficiently.
Click to reveal answer
intermediate
Explain the two-pointer technique used in the Three Sum Problem.
After fixing one element, use two pointers starting from the next element and the end of the array to find pairs that sum to the negative of the fixed element.
Click to reveal answer
intermediate
How do you avoid duplicate triplets in the Three Sum Problem?
Skip duplicate elements when moving pointers and when fixing the first element to ensure unique triplets.
Click to reveal answer
intermediate
What is the time complexity of the optimal Three Sum solution?
O(n^2), where n is the number of elements in the array.
Click to reveal answer
What is the first step in solving the Three Sum Problem efficiently?
AUse a hash map
BReverse the array
CSort the array
DRemove duplicates first
In the two-pointer approach, what do the two pointers represent?
AStart and end of the array segment after the fixed element
BRandom positions in the array
CThe smallest and largest elements in the whole array
DIndices of duplicate elements
How do you handle duplicates when the fixed element is the same as the previous one?
ADouble count it
BProcess it normally
CRemove it from the array
DSkip it to avoid duplicate triplets
What is the sum target for the two-pointer search after fixing one element 'x'?
Ax
B-x
C0
Dx * 2
What is the overall time complexity of the optimal Three Sum solution?
AO(n^2)
BO(n^3)
CO(n log n)
DO(n)
Describe the step-by-step approach to solve the Three Sum Problem with unique triplets.
Think about sorting, fixing one number, and searching pairs with two pointers.
You got /5 concepts.
    Explain how to avoid duplicate triplets in the Three Sum Problem solution.
    Duplicates appear when same numbers are repeated; skipping them prevents repeated triplets.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main goal of the Three Sum Problem All Unique Triplets in an integer array?
      easy
      A. Find all unique triplets that sum to zero
      B. Find the maximum sum of any three numbers
      C. Find the triplet with the smallest product
      D. Find pairs that sum to zero

      Solution

      1. Step 1: Understand the problem statement

        The problem asks to find all unique sets of three numbers in the array whose sum equals zero.
      2. Step 2: Clarify uniqueness and sum condition

        Each triplet must be unique (no duplicates) and the sum of the three numbers must be exactly zero.
      3. Final Answer:

        Find all unique triplets that sum to zero -> Option A
      4. Quick Check:

        Unique triplets with sum zero = Find all unique triplets that sum to zero [OK]
      Hint: Look for three numbers adding exactly to zero [OK]
      Common Mistakes:
      • Confusing pairs with triplets
      • Ignoring uniqueness of triplets
      • Looking for max or min sums instead of zero sum
      2. Which of the following C++ code snippets correctly sorts the input vector nums before applying the two-pointer technique in the Three Sum problem?
      easy
      A. std::sort(nums);
      B. sort(nums, nums + nums.size());
      C. nums.sort();
      D. std::sort(nums.begin(), nums.end());

      Solution

      1. Step 1: Identify correct sorting syntax for std::vector

        For a vector, sorting requires iterators: nums.begin() and nums.end().
      2. Step 2: Check each option

        std::sort(nums.begin(), nums.end()); uses correct syntax. sort(nums, nums + nums.size()); is invalid because nums is a vector, not a pointer array. nums.sort(); is invalid because vector has no sort() method. std::sort(nums); is invalid because std::sort requires two iterators.
      3. Final Answer:

        std::sort(nums.begin(), nums.end()); -> Option D
      4. Quick Check:

        Correct vector sorting = std::sort(nums.begin(), nums.end()); [OK]
      Hint: Use iterators with std::sort for vectors [OK]
      Common Mistakes:
      • Using pointer syntax on vectors
      • Calling sort() as a vector method
      • Passing only one argument to std::sort
      3. What is the output of the following C++ code snippet that finds all unique triplets summing to zero?
      std::vector<int> nums = {-1, 0, 1, 2, -1, -4};
      std::vector result;
      std::sort(nums.begin(), nums.end());
      for (int i = 0; i < nums.size() - 2; i++) {
        if (i > 0 && nums[i] == nums[i-1]) continue;
        int left = i + 1, right = nums.size() - 1;
        while (left < right) {
          int sum = nums[i] + nums[left] + nums[right];
          if (sum == 0) {
            result.push_back({nums[i], nums[left], nums[right]});
            while (left < right && nums[left] == nums[left+1]) left++;
            while (left < right && nums[right] == nums[right-1]) right--;
            left++; right--;
          } else if (sum < 0) {
            left++;
          } else {
            right--;
          }
        }
      }
      for (auto &triplet : result) {
        for (int num : triplet) std::cout << num << ' ';
        std::cout << '\n';
      }
      medium
      A. No output
      B. -1 -1 2 -1 0 1
      C. -4 -1 2 -1 0 1
      D. -1 0 1 0 1 2

      Solution

      1. Step 1: Sort the array and initialize pointers

        Sorted array: [-4, -1, -1, 0, 1, 2]. Loop through each element with two pointers to find triplets summing to zero.
      2. Step 2: Identify unique triplets with sum zero

        Triplets found are [-1, -1, 2] and [-1, 0, 1]. These are printed line by line.
      3. Final Answer:

        -1 -1 2 -1 0 1 -> Option B
      4. Quick Check:

        Unique triplets = [-1, -1, 2] and [-1, 0, 1] [OK]
      Hint: Sort first, then use two pointers to find zero sum triplets [OK]
      Common Mistakes:
      • Not skipping duplicates
      • Incorrect pointer movement
      • Printing wrong triplets
      4. Identify the bug in the following code snippet for the Three Sum problem:
      std::vector<int> nums = {-2, 0, 1, 1, 2};
      std::vector result;
      std::sort(nums.begin(), nums.end());
      for (int i = 0; i < nums.size() - 2; i++) {
        int left = i + 1, right = nums.size() - 1;
        while (left < right) {
          int sum = nums[i] + nums[left] + nums[right];
          if (sum == 0) {
            result.push_back({nums[i], nums[left], nums[right]});
            left++;
            right--;
          } else if (sum < 0) {
            left++;
          } else {
            right--;
          }
        }
      }
      
      medium
      A. Missing check to skip duplicate i values
      B. Incorrect sorting of the input vector
      C. Wrong initialization of pointers left and right
      D. Using push_back instead of emplace_back

      Solution

      1. Step 1: Analyze duplicate handling for i

        The code does not skip duplicate values for i, which can cause duplicate triplets in the result.
      2. Step 2: Confirm other parts are correct

        Sorting is correct, pointers are initialized properly, and push_back is valid here.
      3. Final Answer:

        Missing check to skip duplicate i values -> Option A
      4. Quick Check:

        Skipping duplicates for i avoids repeated triplets [OK]
      Hint: Always skip duplicate i to avoid repeated triplets [OK]
      Common Mistakes:
      • Not skipping duplicates for i
      • Skipping duplicates only for pointers
      • Assuming sorting fixes duplicates automatically
      5. Given the input array nums = {0, 0, 0, 0}, what is the correct output of the Three Sum problem that finds all unique triplets summing to zero?
      hard
      A. []
      B. [[0, 0, 0], [0, 0, 0]]
      C. [[0, 0, 0]]
      D. [[0, 0]]

      Solution

      1. Step 1: Understand the input with duplicates

        All elements are zero, so the only triplet summing to zero is [0, 0, 0].
      2. Step 2: Ensure uniqueness of triplets

        Even though multiple zeros exist, only one unique triplet [0, 0, 0] should be returned.
      3. Final Answer:

        [[0, 0, 0]] -> Option C
      4. Quick Check:

        Unique triplet with zeros = [[0, 0, 0]] [OK]
      Hint: Multiple zeros produce one unique triplet [OK]
      Common Mistakes:
      • Returning duplicate triplets
      • Returning pairs instead of triplets
      • Returning empty result for all zeros
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard