What is this all about?
- Used for searching pairs in a SORTED array
- Create pointers that correspond to an index and move towards the beginning, end or middle based on a certain condition.
- We are able to process two or more elements per loop instead of just one.
When do we use it?
- In many problems involving collections such as arrays or lists, we have to analyze each element of the collection compared to its other elements.
Common patterns
- Two pointers, each starting from the beginning and the end until they both meet.
- One pointer moving at a slow pace, while the other pointer moves at twice the speed.
--- Problem
We are asked to compare two elements in an ordered array.
--- FOOR LOOP
If we use a for loop, we create an external pointer and use the
internal "j" as the second pointer.
var i = 0;
for(var j = 1; j < array.length; j++){
if(arr[i] !== arr[j]){
i++;
arr[i] = arr[j]
}
--- WHILE LOOP
If we use a while loop we create two external pointers and the
base one case is while left<right {}. This structure is used when
we need to traverse the array from two opposite points.
let left = 0 <-- pointer 1
let right = array.length - 1 <-- pointer 2
while (left < right) {
let average = array[left] + array[right] / 2
if (average === target) return true;
else if(average < target) left++
else right--
}
return false
}
In action
Implement a function called countUniqueValues, which accepts a sorted array, and counts the unique values in the array.
Top comments (0)