-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0645-set-mismatch.js
More file actions
29 lines (24 loc) · 922 Bytes
/
0645-set-mismatch.js
File metadata and controls
29 lines (24 loc) · 922 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* Set Mismatch
* Time Complexity: O(N)
* Space Complexity: O(1)
*/
var findErrorNums = function (nums) {
let arrayLength = nums.length;
let calculatedSum = 0;
let calculatedSumOfSquares = 0;
for (let currentIdx = 0; currentIdx < arrayLength; currentIdx++) {
calculatedSum += nums[currentIdx];
calculatedSumOfSquares += nums[currentIdx] * nums[currentIdx];
}
let expectedTotalSum = (arrayLength * (arrayLength + 1)) / 2;
let expectedTotalSumOfSquares =
(arrayLength * (arrayLength + 1) * (2 * arrayLength + 1)) / 6;
let differenceBetweenSums = calculatedSum - expectedTotalSum;
let sumOfNumbersAandB =
(calculatedSumOfSquares - expectedTotalSumOfSquares) /
differenceBetweenSums;
let duplicatedNumber = (differenceBetweenSums + sumOfNumbersAandB) / 2;
let missingNumber = (sumOfNumbersAandB - differenceBetweenSums) / 2;
return [duplicatedNumber, missingNumber];
};