# #array 13 ###### tags:`Array` `Medium` ## Problem [leetcode 287] 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 uses only constant extra space.== ### Sample Input ```javascript nums = [1,3,4,2,2] ``` ### Sample Output ```javascript 2 ``` <br> <hr/> ## Solutions ### Official ```javascript= ``` <br> --- ### Everyone's :::spoiler YC ```javascript= /* time: O(n) - where n is the length of the given array space: O(1) */ function firstDuplicateValue(array) { const record = new Array(array.length).fill(false); for(let i = 0; i < array.length; i++){ const num = array[i] const index = array[i] - 1; if(record[index]){ return num; } else{ record[index] = true; } } return -1; } ``` ::: <br> :::spoiler 月 - Negative Marking ```javascript= /* time: O(n), space: O(1) n is the length of array. */ var findDuplicate = function(array) { for(let i = 0; i < array.length; i+=1){ const x = Math.abs(array[i]); if(array[x] < 0) return x; array[x] = -array[x]; } return -1 }; ``` ::: <br> :::spoiler 東 ```javascript= // Time O(n^2) | Space O(1) - n is the length of input array function firstDuplicateValue(array) { let minIdx = array.length; for(let i = 0; i < array.length; i++){ for(let j = i + 1; j < array.length; j++){ if(array[i] === array[j] && j < minIdx) minIdx = j; } } return minIdx === array.length ? -1 : array[minIdx]; } ``` ```javascript= // Time O(n) | Space O(n) - n is the length of input array function firstDuplicateValue(array) { const map = {}; for(const num of array){ if(map[num]){ return num; } map[num] = true; } return -1; } ``` ```javascript= // Time O(n) | Space O(1) - n is the length of input array function firstDuplicateValue(array) { for(const num of array) { if(array[Math.abs(num) - 1] < 0) return Math.abs(num); array[Math.abs(num) - 1] *= -1; } return -1; } ``` ::: <br> :::spoiler Hao ```javascript= /** * Time complexity: O(n) where n stands for array.length * Space complexity: O(1) */ function firstDuplicateValue(array) { let res = -1; const values = {}; for (let i = 0; i < array.length; i += 1) { const cur = array[i]; if (values[cur] === undefined) values[cur] = true; else { res = cur; break; } } return res; } ``` ::: <br> <br> --- ## Supplement / Discussion https://leetcode.com/problems/find-the-duplicate-number/solutions/127594/find-the-duplicate-number/ | solution | time | space | | ------------------ | -------- | ----- | | sort | O(nlogn) | O(1) | | hash map | O(n) | O(n) | | marking | O(n) | O(1) | | binary search | O(nlogn) | O(1) | | linked list cycle | O(n) | O(1) | | Bit by bit | O(nlogn) | O(1) |