-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2965.ts
More file actions
69 lines (51 loc) · 1.64 KB
/
2965.ts
File metadata and controls
69 lines (51 loc) · 1.64 KB
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
type Matrix = number[][]
type SortedNums = {
num: number,
repetitions: number
}
type Return = {
missingNum: number,
repeatingNum: number
}
function findPosition(num: number, numsRepetitions: Map<number, number>){
return numsRepetitions.get(num)
}
function findRepeatingNum(numsRepetitions: SortedNums[]){
return numsRepetitions.find(item => item.repetitions > 1)
}
function returnMissingAndRepeatingNum(maxLength: number, map: Map<number, number>){
let missingNum:number = 0
let repeatingNum:number = 0
for (let i = 1; i <= maxLength; i++) {
if(missingNum !== 0 && repeatingNum !== 0) {
return {
missingNum,
repeatingNum
}
}
const repetitions = findPosition(i, map)
if(!repetitions){
missingNum = i
continue
}
repeatingNum = repetitions === 2 ? i : repeatingNum
}
return {missingNum, repeatingNum}
}
function findMissingAndRepeatedValues(matrix: Matrix): number[]{
const matrixLength = matrix.length;
const maxLength = matrixLength * matrixLength
const numsRepetitions: Map<number, number> = new Map()
for (const arr of matrix) {
for (const item of arr) {
const indexFound = findPosition(item, numsRepetitions)
if(!indexFound){
numsRepetitions.set(item, 1)
}else{
numsRepetitions.set(item, indexFound + 1)
}
}
}
const {missingNum, repeatingNum} = returnMissingAndRepeatingNum(maxLength, numsRepetitions)
return [repeatingNum, missingNum]
}