The document discusses solving problems using the two pointer method, which uses two pointers that iterate through an array in the same direction to find solutions efficiently. It provides examples of how to use this method to solve the Subarray Sum problem in O(n) time and the 2SUM problem in O(n log n) time by sorting the array and moving the pointers towards each other. The 3SUM problem can also be solved in O(n^2) time using a similar approach with three pointers.
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
139 views
Two Pointers
The document discusses solving problems using the two pointer method, which uses two pointers that iterate through an array in the same direction to find solutions efficiently. It provides examples of how to use this method to solve the Subarray Sum problem in O(n) time and the 2SUM problem in O(n log n) time by sorting the array and moving the pointers towards each other. The 3SUM problem can also be solved in O(n^2) time using a similar approach with three pointers.
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3
# practice two pointer questions :
* give some time to think
$ 5 min for easy $ 8 min for medium $ 10 - 15 min for hard * No. of problems to practice : $ 4 easy $ 3 medium $ 2 hard * problems : $ discuss two problems given in cp handbook $ easy - 977, 283, 88 $ medium - 1248, Two pointers method In the two pointers method, two pointers are used to iterate through the array values. Both pointers can move to one direction only, which ensures that the algorithm works efficiently. Next we discuss two problems that can be solved using the two pointers method. Subarray sum As the first example, consider a problem where we are given an array of n positive integers and a target sum x , and we want to find a subarray whose sum is x or report that there is no such subarray. For example, the array 1 3 2 5 1 1 2 3 5 1 1 2 3 contains a subarray whose sum is 8: 1 3 2 This problem can be solved in O ( n ) time by using the two pointers method. The idea is to maintain pointers that point to the first and last value of a subarray. On each turn, the left pointer moves one step to the right, and the right pointer moves to the right as long as the resulting subarray sum is at most x . If the sum becomes exactly x , a solution has been found. 77As an example, consider the following array and a target sum x = 8: 1 3 2 5 1 1 2 3 The initial subarray contains the values 1, 3 and 2 whose sum is 6: 1 3 2 5 1 1 2 3 Then, the left pointer moves one step to the right. The right pointer does not move, because otherwise the subarray sum would exceed x . 1 3 2 5 1 1 2 3 Again, the left pointer moves one step to the right, and this time the right pointer moves three steps to the right. The subarray sum is 2 + 5 + 1 = 8, so a subarray whose sum is x has been found. 1 3 2 5 1 1 2 3 The running time of the algorithm depends on the number of steps the right pointer moves. While there is no useful upper bound on how many steps the pointer can move on a single turn. we know that the pointer moves a total of O ( n ) steps during the algorithm, because it only moves to the right. Since both the left and right pointer move O ( n ) steps during the algorithm, the algorithm works in O ( n ) time. 2SUM problem Another problem that can be solved using the two pointers method is the following problem, also known as the 2SUM problem: given an array of n numbers and a target sum x , find two array values such that their sum is x , or report that no such values exist. To solve the problem, we first sort the array values in increasing order. After that, we iterate through the array using two pointers. The left pointer starts at the first value and moves one step to the right on each turn. The right pointer begins at the last value and always moves to the left until the sum of the left and right value is at most x . If the sum is exactly x , a solution has been found. For example, consider the following array and a target sum x = 12: 1 4 5 6 7 9 9 10 The initial positions of the pointers are as follows. The sum of the values is 1 + 10 = 11 that is smaller than x . 781 4 5 6 7 9 9 10 Then the left pointer moves one step to the right. The right pointer moves three steps to the left, and the sum becomes 4 + 7 = 11. 1 4 5 6 7 9 9 10 After this, the left pointer moves one step to the right again. The right pointer does not move, and a solution 5 + 7 = 12 has been found. 1 4 5 6 7 9 9 10 The running time of the algorithm is O ( n log n ), because it first sorts the array in O ( n log n ) time, and then both pointers move O ( n ) steps. Note that it is possible to solve the problem in another way in O ( n log n ) time using binary search. In such a solution, we iterate through the array and for each array value, we try to find another value that yields the sum x . This can be done by performing n binary searches, each of which takes O (log n ) time. A more difficult problem is the 3SUM problem that asks to find three array values whose sum is x . Using the idea of the above algorithm, this problem can be solved in O ( n 2 ) time 1 . Can you see how?