Solution: Find the Duplicate Number
Let's solve the Find the Duplicate Number problem using the Fast and Slow Pointers pattern.
We'll cover the following...
Statement
Given an array of positive numbers, nums
, such that the values lie in the range , inclusive, and that there are numbers in the array, find and return the duplicate number present in nums
. There is only one repeated number in nums
, but it may appear more than once in the array.
Note: You cannot modify the given array
nums
. You have to solve the problem using only constant extra space.
Constraints:
nums.length
-
nums[i]
- All the integers in
nums
are unique except for one integer that will appear more than once.
Solution
This solution involves two key steps: identifying the cycle and locating the entry point of this identified cycle, which represents the duplicate number in the array.
The fast and slow pointers technique detects such cycles efficiently, where one pointer takes one step at a time and the other advances by two steps. Initially pointing at the start of the array, the position of each pointer for the next step is determined by the current value they are pointing to. If a pointer points to the value
Once the duplicate number is confirmed, we reset one of the pointers (usually the slow pointer) to index
Now, let’s look at the detailed workflow of the solution:
For this problem, the duplicate number will create a cycle in the nums
array. The cycle in the nums
array helps identify the duplicate number.
To find the cycle, we’ll move in the nums
array using the