Skip to content

Commit 5cda61a

Browse files
committed
Add two missing nums problem
1 parent 461bd1c commit 5cda61a

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package twoMissingNumbers;
2+
3+
import java.util.Arrays;
4+
5+
public class TwoMissingNumbers {
6+
7+
//TC: O(n) SC: O(n)
8+
private static int[] findTwoMissingNumbers(int[] nums) {
9+
boolean[] present = new boolean[nums.length + 2];
10+
int[] missingNums = new int[2];
11+
12+
for(int num: nums) {
13+
present[num-1] = true;
14+
}
15+
16+
int j=0;
17+
for(int i=1; i<= nums.length+2; i++){
18+
if(!present[i-1]) {
19+
missingNums[j++] = i;
20+
}
21+
}
22+
23+
return missingNums;
24+
}
25+
26+
//TC: O(n) SC: O(1)
27+
private static int[] findTwoMissingNumbers1(int[] nums) {
28+
int[] missingTwoNums = new int[2];
29+
int len = nums.length + 2;
30+
int sum = (len * (len + 1))/2;
31+
int numsSum = 0;
32+
33+
for (int num : nums) {
34+
numsSum += num;
35+
}
36+
37+
int missingTwoNumsSum = sum - numsSum;
38+
int missingTwoNumsAvg = missingTwoNumsSum/2;
39+
40+
int sumUntilAvg = missingTwoNumsAvg * (missingTwoNumsAvg + 1)/2;
41+
int sumUntilNumsAvg = 0;
42+
43+
for (int i = 0; i < nums.length; i++) {
44+
if(nums[i] <= missingTwoNumsAvg) {
45+
sumUntilNumsAvg += nums[i];
46+
}
47+
}
48+
49+
int firstMissingNum = sumUntilAvg - sumUntilNumsAvg;
50+
missingTwoNums[0] = firstMissingNum;
51+
missingTwoNums[1] = missingTwoNumsSum - firstMissingNum;
52+
53+
return missingTwoNums;
54+
}
55+
56+
public static void main(String[] args) {
57+
int[] nums1 = {3, 2, 5, 1, 6, 8};
58+
int[] nums2 = {3, 2, 5, 1, 6, 4};
59+
60+
System.out.println(Arrays.toString(findTwoMissingNumbers(nums1)));
61+
System.out.println(Arrays.toString(findTwoMissingNumbers(nums2)));
62+
63+
System.out.println(Arrays.toString(findTwoMissingNumbers1(nums1)));
64+
System.out.println(Arrays.toString(findTwoMissingNumbers1(nums2)));
65+
}
66+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
//TC: O(n) SC: O(n)
2+
function findTwoMissingNumbers(nums) {
3+
let present = new Array(nums.length+2).fill(false);
4+
let missingTwoNums = [];
5+
6+
for(let num of nums) {
7+
present[num-1] = true;
8+
}
9+
10+
for (let i = 1; i <= nums.length+2; i++) {
11+
if(!present[i-1]) {
12+
missingTwoNums.push(i);
13+
}
14+
}
15+
16+
return missingTwoNums;
17+
}
18+
19+
//TC: O(n) SC: O(1)
20+
function findTwoMissingNumbers1(nums) {
21+
let missingTwoNums =[];
22+
let len = nums.length+2;
23+
let sum = Math.floor((len * (len + 1))/2);
24+
25+
let numsSum = 0;
26+
for (let i = 0; i < nums.length; i++) {
27+
numsSum += nums[i];
28+
}
29+
30+
let missingTwoNumsSum = sum - numsSum;
31+
let missingTwoNumsAvg = Math.floor(missingTwoNumsSum/2);
32+
33+
let sumUntilAvg = Math.floor((missingTwoNumsAvg * (missingTwoNumsAvg + 1))/2);
34+
let numsSumUntilAvg = 0;
35+
36+
for(let i=0; i<nums.length; i++){
37+
if(nums[i] <= missingTwoNumsAvg) {
38+
numsSumUntilAvg += nums[i];
39+
}
40+
}
41+
42+
let missingFirstNum = sumUntilAvg-numsSumUntilAvg;
43+
missingTwoNums.push(missingFirstNum);
44+
missingTwoNums.push(missingTwoNumsSum - missingFirstNum);
45+
46+
return missingTwoNums;
47+
}
48+
49+
50+
const nums1 = [3, 2, 5, 1, 6, 8];
51+
const nums2 = [3, 2, 5, 1, 6, 4];
52+
console.log(findTwoMissingNumbers(nums1));
53+
console.log(findTwoMissingNumbers(nums2));
54+
55+
console.log(findTwoMissingNumbers1(nums1));
56+
console.log(findTwoMissingNumbers1(nums2));

src/javascript/algorithms/array/twoMissingNumbers/twoMissingNumbers.md

Whitespace-only changes.

0 commit comments

Comments
 (0)