Leetcode Top Interview โœจ
GithubLinkedinXOfficial Website
  • Leetcode Top Interview ๐ŸŽฏ
  • Guide to Calculating Algorithm Complexity ๐Ÿš€
  • Topic 1 Array - String
    • 88. Merge Sorted Arrays ๐Ÿงฉ
    • 27. Remove Element ๐Ÿงน
    • 26. Remove Duplicates from Sorted Array ๐Ÿšซ
    • 80. Remove Duplicates from Sorted Array II ๐Ÿšซ๐Ÿšซ
    • 169. Majority Element ๐Ÿ‘‘
    • 189. Rotate Array ๐Ÿ”„
    • 121. Best Time to Buy and Sell Stock ๐Ÿ“ˆ
    • 122. Best Time to Buy and Sell Stock II ๐Ÿ“ˆ๐Ÿ’ฐ
    • 55. Jump Game ๐Ÿƒโ€โ™‚๏ธ
    • 45. Jump Game II ๐Ÿƒโ€โ™‚๏ธ
    • 274. H-Index ๐Ÿ“Š
    • 380. Insert Delete GetRandom O(1) ๐ŸŽฒ
    • 238. Product of Array Except Self ๐Ÿ”„
    • 134. Gas Station โ›ฝ
    • 135. Candy ๐Ÿฌ
    • 42. Trapping Rain Water ๐ŸŒง๏ธ
    • 13. Roman to Integer ๐Ÿ”ข
    • 018 Integer to Roman
    • 58. Length of Last Word ๐Ÿ” 
    • 14. Longest Common Prefix ๐ŸŒฑ
    • 151. Reverse Words in a String ๐Ÿ”„
    • 6. Zigzag Conversion ๐Ÿ”€
    • 28. Find the Index of the First Occurrence in a String ๐Ÿ”„
    • 68. Text Justification ๐Ÿ”„
  • Topic 2 Two Pointers
    • 125. Valid Palindrome ๐Ÿšฆ
    • 392. Is Subsequence ๐Ÿ“
    • 167. Two Sum II - Input Array Is Sorted ๐Ÿ”
    • 11. Container With Most Water ๐Ÿž๏ธ
    • 15. 3Sum ๐ŸŒ
  • Topic 3 Sliding Window
    • 209. Minimum Size Subarray Sum ๐ŸŒ
    • 3. Longest Substring Without Repeating Characters ๐ŸŒ
    • 30. Substring with Concatenation of All Words ๐ŸŒ
    • 76. Minimum Window Substring ๐ŸŒ
  • Topic 4 Matrix
    • 36. Valid Sudoku ๐ŸŒ
    • 54. Spiral Matrix ๐ŸŒ
    • 48. Rotate Image ๐Ÿ”„
    • 73. Set Matrix Zeroes
    • 289. Game of Life ๐Ÿ–ผ๏ธ
  • Topic 5 Hashmap
    • 383. Ransom Note ๐Ÿ”
    • 205. Isomorphic Strings ๐Ÿ”
    • 290. Word Pattern ๐Ÿงฉ
    • 242. Valid Anagram ๐ŸŽข
    • 49. Group Anagrams ๐Ÿคนโ€โ™‚๏ธ
    • 1. Two Sum ๐Ÿ”
    • 202. Happy Number ๐Ÿคฉ
    • 219. Contains Duplicate II ๐Ÿ”
    • 128. Longest Consecutive Sequence ๐Ÿ”
  • Topic 6 Intervals
    • 228. Summary Ranges ๐Ÿ“Š
    • 56. Merge Intervals ๐Ÿ”€
    • 57. Insert Interval ๐Ÿ†•
    • 452. Minimum Number of Arrows to Burst Balloons ๐ŸŽˆ
  • Topic 7 Stack
    • 20. Valid Parentheses ๐Ÿ”
    • 71. Simplify Path ๐Ÿ—บ๏ธ
    • 155. Min Stack ๐Ÿ—ƒ๏ธ
    • 150. Evaluate Reverse Polish Notation ๐Ÿง ๐Ÿ’ป
    • 224. Basic Calculator ๐Ÿงฎ
  • Topic 8 Linked List
    • 141. Linked List Cycle ๐Ÿ”
    • 2. Add Two Numbers ๐Ÿ”ข
    • 21. Merge Two Sorted Lists ๐Ÿ”—
    • 138. Copy List with Random Pointer ๐Ÿ”—
    • 92. Reverse Linked List II ๐Ÿ”„
      • Letโ€™s explain step by step ๐Ÿ‡
    • 25. Reverse Nodes in k-Group ๐Ÿ”„
    • 19. Remove Nth Node From End of List ๐Ÿ—‘๏ธ
    • 82. Remove Duplicates from Sorted List II โŒ๐Ÿ”ข
    • 61. Rotate List ๐Ÿ”„
    • 86. Partition List ๐Ÿ”—
    • 146. LRU Cache ๐Ÿ”—
  • Topic 9 Binary Tree General
    • 104. Maximum Depth of Binary Tree ๐Ÿ”—
    • 100. Same Tree ๐Ÿ”—
    • 226. Invert Binary Tree ๐Ÿ”—
    • 101. Symmetric Tree ๐Ÿ”—
    • 105. Construct Binary Tree from Preorder and Inorder Traversal ๐Ÿ”—
    • 106. Construct Binary Tree from Inorder and Postorder Traversal ๐Ÿ”—
    • 117. Populating Next Right Pointers in Each Node II ๐Ÿ”—
    • 114. Flatten Binary Tree to Linked List ๐Ÿ”—
    • 112. Path Sum ๐Ÿ”—
    • 129. Sum Root to Leaf Numbers ๐Ÿ”—
      • What_is_DFS
    • 124. Binary Tree Maximum Path Sum ๐Ÿ”—
Powered by GitBook
On this page
  • ๐Ÿ“Œ What is Two Pointers?
  • Types of Two Pointers:
  • ๐Ÿ’ก Key Idea
  • ๐Ÿ› ๏ธ How to Apply Two Pointers?
  • ๐Ÿ“ Example 1: Two Sum (Opposite Pointers) ๐Ÿ’ก
  • Problem:
  • Code:
  • Explanation ๐Ÿ“
  • ๐Ÿ“ Example 2: Longest Substring Without Repeating Characters (Same Direction Pointers) ๐Ÿ”‘
  • Problem:
  • Code:
  • Explanation ๐Ÿ“
  • ๐Ÿ”ฅ Applications of Two Pointers
  • ๐Ÿš€ Why Use Two Pointers?
  • ๐Ÿ Conclusion

Was this helpful?

Topic 2 Two Pointers

Previous68. Text Justification ๐Ÿ”„Next125. Valid Palindrome ๐Ÿšฆ

Last updated 4 months ago

Was this helpful?

The Two Pointers technique is a fundamental approach in algorithmic problem-solving, widely used to optimize solutions involving arrays, strings, and other linear data structures. By using two pointers, you can reduce the time complexity of a problem and solve it efficiently. Let's explore how this technique works and when to apply it! ๐Ÿš€


๐Ÿ“Œ What is Two Pointers?

The Two Pointers technique uses two pointers or indices to traverse through an array or string. These pointers can either move towards each other or move in the same direction at different speeds. This technique is particularly useful for solving problems related to searching, sorting, and array manipulation.

Types of Two Pointers:

  1. Opposite Pointers:

    • One pointer starts at the beginning, and the other starts at the end of the data structure.

    • The pointers move towards each other, often used in problems like finding pairs that sum up to a target value.

  2. Same Direction Pointers:

    • Both pointers move in the same direction, but at different speeds.

    • This is often used in problems like detecting cycles, finding subarrays, or partitioning arrays.


๐Ÿ’ก Key Idea

The key advantage of the Two Pointers technique is its ability to reduce the time complexity of problems from (O(n^2)) to (O(n)), which makes it much more efficient for large inputs. By adjusting the pointers dynamically, we avoid redundant calculations and improve performance.

The technique typically works by:

  • Comparing elements from two ends or at different positions.

  • Shifting the pointers to explore the array or string.

  • Updating the result based on the current comparison.


๐Ÿ› ๏ธ How to Apply Two Pointers?

  1. Opposite Pointers:

    • Place one pointer at the beginning of the array and the other at the end.

    • Move the pointers towards each other while performing comparisons or calculations.

  2. Same Direction Pointers:

    • Place both pointers at the same starting position.

    • Move the pointers at different speeds, adjusting one pointer based on conditions (e.g., when a certain condition is met, move one pointer ahead while keeping the other at a constant position).


๐Ÿ“ Example 1: Two Sum (Opposite Pointers) ๐Ÿ’ก

Problem:

Find two numbers in a sorted array that add up to a specific target.

Code:

List<int> twoSum(List<int> nums, int target) {
  int left = 0;
  int right = nums.length - 1;

  while (left < right) {
    int sum = nums[left] + nums[right];

    if (sum == target) {
      return [left, right]; // Return indices
    } else if (sum < target) {
      left++; // Move left pointer right to increase sum
    } else {
      right--; // Move right pointer left to decrease sum
    }
  }
  return []; // No solution found
}

void main() {
  List<int> nums = [2, 7, 11, 15];
  int target = 9;
  print(twoSum(nums, target)); // Output: [0, 1]
}

Explanation ๐Ÿ“

  1. Input: nums = [2, 7, 11, 15], target = 9

  2. Sliding Window Steps:

    • Start: nums[0] + nums[3] = 2 + 15 = 17 (move right pointer)

    • Move: nums[0] + nums[2] = 2 + 11 = 13 (move right pointer)

    • Move: nums[0] + nums[1] = 2 + 7 = 9 โœ… (found solution)

  3. Output: [0, 1] (indices of the two numbers that sum to the target)


๐Ÿ“ Example 2: Longest Substring Without Repeating Characters (Same Direction Pointers) ๐Ÿ”‘

Problem:

Find the length of the longest substring without repeating characters.

Code:

int lengthOfLongestSubstring(String s) {
  int maxLength = 0;
  int start = 0;
  Map<String, int> seen = {};

  for (int end = 0; end < s.length; end++) {
    String currentChar = s[end];

    if (seen.containsKey(currentChar)) {
      start = max(start, seen[currentChar]! + 1); // Update start if char repeats
    }

    seen[currentChar] = end; // Update the last seen position
    maxLength = max(maxLength, end - start + 1); // Update max length
  }

  return maxLength;
}

void main() {
  String s = "abcabcbb";
  print(lengthOfLongestSubstring(s)); // Output: 3
}

Explanation ๐Ÿ“

  1. Input: s = "abcabcbb"

  2. Sliding Window Steps:

    • Start: a โ†’ Length = 1

    • Extend: ab โ†’ Length = 2

    • Extend: abc โ†’ Length = 3 โœ…

    • Repeat: Move start to skip the first a.

    • Final: The longest substring is abc, length = 3.


๐Ÿ”ฅ Applications of Two Pointers

  1. Pair Sum Problems ๐Ÿ‘ซ

  2. Palindrome Check ๐Ÿ”„

  3. Merging Sorted Arrays โž—

  4. Finding Subarrays/Substrings ๐Ÿ”


๐Ÿš€ Why Use Two Pointers?

  • Efficiency: Reduces time complexity from (O(n^2)) to (O(n)) in many problems.

  • Space Efficient: Often does not require extra space, making it ideal for in-place algorithms.

  • Intuitive: Often provides a natural and straightforward approach to problems involving arrays and strings.


๐Ÿ Conclusion

The Two Pointers technique is a highly efficient and versatile approach to solving many algorithmic problems. By using two pointers, you can reduce redundant work and improve performance significantly. Keep practicing and applying this technique to master it! ๐ŸŽฏ

Happy Coding !!!