Find the Duplicate Number
Problem
https://leetcode.com/problems/find-the-duplicate-number/
Given an array of integers nums containing n + 1 integers where
each integer is in the range [1, n] inclusive.
There is only one repeated number in nums, return
this repeated number.
You must solve the problem without modifying the array nums and
using only constant extra space.
Example 1:
Input: nums = [1,3,4,2,2]
Output: 2
Example 2:
Input: nums = [3,1,3,4,2]
Output: 3
Example 3:
Input: nums = [3,3,3,3,3]
Output: 3
Constraints:
1 <= n <= 10:sup:`5`nums.length == n + 11 <= nums[i] <= nAll the integers in
numsappear only once except for precisely one integer which appears two or more times.
Follow up:
How can we prove that at least one duplicate number must exist in
nums?Can you solve the problem in linear runtime complexity?
Pattern
Array, Two Pointers, Binary Search, Bit Manipulation
Approaches
Code
def findDuplicate(nums: list[int]) -> int:
for i in range(len(nums)):
n = abs(nums[i])
if nums[n] < 0:
return n
else:
nums[n] = -nums[n]
return -1
Test
>>> from find_the_duplicate_number__negation_marking import findDuplicate
>>> findDuplicate([1, 3, 4, 2, 2])
2
>>> findDuplicate([3, 1, 3, 4, 2])
3
>>> findDuplicate([3, 3, 3, 3, 3])
3
- find_the_duplicate_number__negation_marking.findDuplicate(nums: list[int]) int