Skip to content

Commit a43fe84

Browse files
committed
Three Sum solution added
1 parent 53b02ec commit a43fe84

11 files changed

+545
-10
lines changed

.gitignore

Lines changed: 0 additions & 10 deletions
This file was deleted.

11-containerWithMostWater.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Brute force - O(n^2)
2+
3+
// var maxArea = function (height) {
4+
// let result = 0;
5+
// for (let i = 0; i < height.length; i++) {
6+
// let intermediate = 0;
7+
// for (let j = i + 1; j < height.length; j++) {
8+
// let width = j - i;
9+
// let length = Math.min(height[i], height[j]);
10+
// let area = width * length;
11+
12+
// if (area > intermediate) {
13+
// intermediate = area;
14+
// }
15+
// }
16+
// if (intermediate > result) {
17+
// result = intermediate;
18+
// }
19+
// }
20+
// return result;
21+
// };
22+
23+
// Two Pointer - O(n)
24+
25+
var maxArea = function (height) {
26+
let maxArea = 0;
27+
let i = 0;
28+
let j = height.length - 1;
29+
30+
while (i !== j) {
31+
let area = (j - i) * Math.min(height[i], height[j]);
32+
33+
if (area > maxArea) maxArea = area;
34+
35+
if (height[i] < height[j]) {
36+
i++;
37+
} else {
38+
j--;
39+
}
40+
}
41+
42+
return maxArea;
43+
};
44+
45+
console.log(maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7]));
46+

12-integerToRoman.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
var intToRoman = function (num) {
2+
let result = "";
3+
4+
let decrementByLetter = (value, letter) => {
5+
while (num - value >= 0) {
6+
num -= value;
7+
result += letter;
8+
}
9+
};
10+
decrementByLetter(1000, "M");
11+
decrementByLetter(500, "D");
12+
decrementByLetter(100, "C");
13+
decrementByLetter(50, "L");
14+
decrementByLetter(10, "X");
15+
decrementByLetter(5, "V");
16+
decrementByLetter(1, "I");
17+
18+
if (result.includes("IIII")) {
19+
result = result.slice(0, result.length - 4) + "IV";
20+
}
21+
if (result.includes("VIV")) {
22+
result = result.slice(0, result.length - 3) + "IX";
23+
}
24+
if ((result.includes("XXXX"))) {
25+
result =
26+
result.slice(0, result.indexOf("X")) +
27+
"XL" +
28+
result.slice(result.indexOf("X") + 4, result.length);
29+
}
30+
if ((result.includes("XXXX"))) {
31+
result =
32+
result.slice(0, result.indexOf("XXXX")) +
33+
"XL" +
34+
result.slice(result.indexOf("XXXX") + 4, result.length);
35+
}
36+
if ((result.includes("LXL"))) {
37+
result =
38+
result.slice(0, result.indexOf("LXL")) +
39+
"XC" +
40+
result.slice(result.indexOf("LXL") + 3, result.length);
41+
}
42+
if ((result.includes("CCCC"))) {
43+
result =
44+
result.slice(0, result.indexOf("CCCC")) +
45+
"CD" +
46+
result.slice(result.indexOf("CCCC") + 4, result.length);
47+
}
48+
if ((result.includes("DCD"))) {
49+
result =
50+
result.slice(0, result.indexOf("DCD")) +
51+
"CM" +
52+
result.slice(result.indexOf("DCD") + 3, result.length);
53+
}
54+
55+
return result;
56+
};
57+
58+
console.log(intToRoman(1994));
59+
60+
61+
62+
63+

13-romanToInteger.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
var romanToInt = function (s) {
2+
let arr = s.split("");
3+
let i = 0;
4+
let result = 0;
5+
6+
while (arr[i] != undefined) {
7+
switch (arr[i]) {
8+
case "I":
9+
if (arr[i + 1] === "V") {
10+
result += 4;
11+
i++;
12+
} else if (arr[i + 1] === "X") {
13+
result += 9;
14+
i++;
15+
} else {
16+
result += 1;
17+
}
18+
break;
19+
case "V":
20+
result += 5;
21+
break;
22+
case "X":
23+
if (arr[i + 1] === "L") {
24+
result += 40;
25+
i++;
26+
} else if (arr[i + 1] === "C") {
27+
result += 90;
28+
i++;
29+
} else {
30+
result += 10;
31+
}
32+
break;
33+
case "L":
34+
result += 50;
35+
break;
36+
case "C":
37+
if (arr[i + 1] === "D") {
38+
result += 400;
39+
i++;
40+
} else if (arr[i + 1] === "M") {
41+
result += 900;
42+
i++;
43+
} else {
44+
result += 100;
45+
}
46+
break;
47+
case "D":
48+
result += 500;
49+
break;
50+
case "M":
51+
result += 1000;
52+
break;
53+
}
54+
i++;
55+
}
56+
57+
return result;
58+
};
59+
60+
console.log(romanToInt("MCMXCIV"));

14-longestCommonPrefix.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var longestCommonPrefix = function (strs) {
2+
let test = strs[0];
3+
let index = 0;
4+
let result = "";
5+
console.log(!!test);
6+
if (strs.length > 0 && !!test) {
7+
while (true) {
8+
if (strs.every((word) => word[index] === test[index])) {
9+
if (test[index]) {
10+
result += test[index];
11+
index++;
12+
} else {
13+
return result;
14+
}
15+
} else {
16+
return result;
17+
}
18+
}
19+
} else {
20+
return "";
21+
}
22+
};
23+
24+
console.log(longestCommonPrefix(["a", "a"]));

15-threeSum.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
var threeSum = function (nums) {
2+
if (nums.length < 3) {
3+
return [];
4+
}
5+
let mergeSort = function (array) {
6+
if (array.length === 0) {
7+
return [];
8+
}
9+
let merge = function (firstArray, secondArray) {
10+
let i = 0;
11+
let j = 0;
12+
let result = [];
13+
while (true) {
14+
if (firstArray[i] < secondArray[j]) {
15+
result.push(firstArray[i]);
16+
i++;
17+
} else {
18+
result.push(secondArray[j]);
19+
j++;
20+
}
21+
22+
if (i === firstArray.length) {
23+
return result.concat(
24+
secondArray.slice(j, secondArray.length)
25+
);
26+
} else if (j === secondArray.length) {
27+
return result.concat(
28+
firstArray.slice(i, firstArray.length)
29+
);
30+
}
31+
}
32+
};
33+
34+
if (array.length === 1) {
35+
return array;
36+
}
37+
const middleIndex = Math.floor(array.length / 2);
38+
const firstArray = mergeSort(array.slice(0, middleIndex));
39+
const secondArray = mergeSort(array.slice(middleIndex, array.length));
40+
const merged = merge(firstArray, secondArray);
41+
return merged;
42+
};
43+
44+
const twoSum = function (sorted, target) {
45+
if (sorted.length === 0) {
46+
return [];
47+
}
48+
let result = [];
49+
let i = 0;
50+
let j = sorted.length - 1;
51+
52+
while (true) {
53+
let sum = sorted[i] + sorted[j];
54+
if (sum > target) {
55+
j--;
56+
} else if (sum < target) {
57+
i++;
58+
} else {
59+
let add = true;
60+
result.forEach((el) => {
61+
if (el[0] === sorted[i] && el[1] === sorted[j]) {
62+
add = false;
63+
}
64+
});
65+
66+
if (add) {
67+
result.push([sorted[i], sorted[j]]);
68+
}
69+
i++;
70+
}
71+
72+
if (i >= j) {
73+
return result;
74+
}
75+
}
76+
};
77+
78+
const sorted = mergeSort(nums);
79+
let result = [];
80+
81+
for (let i = 0; i < sorted.length; i++) {
82+
if (sorted[i] !== sorted[i - 1]) {
83+
let first = sorted[i];
84+
// console.log(first);
85+
let arr = sorted.slice(i + 1);
86+
// console.log(arr);
87+
if (arr.length >= 2) {
88+
answers = twoSum(arr, 0 - first).map((el) => {
89+
return [first].concat(el);
90+
});
91+
// console.log(answers);
92+
result = result.concat(answers);
93+
}
94+
}
95+
}
96+
97+
return result;
98+
};
99+
100+
console.log(threeSum([-2, -3, 0, 0, -2]));

5-longestPalindromicSubstring.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
var longestPalindrome = function (s) {
2+
let isPalindrome = function (s) {
3+
for (let i = 0; i < Math.ceil(s.length / 2); i++) {
4+
if (s[i] !== s[s.length - 1 - i]) {
5+
return false;
6+
}
7+
}
8+
return true;
9+
};
10+
11+
let testSubstring = function (s, maxLength) {
12+
for (let j = s.length - 1; j >= 0; j--) {
13+
if (j + 1 < maxLength) {
14+
return "";
15+
}
16+
17+
if (s[0] === s[j]) {
18+
const substring = s.slice(0, j + 1);
19+
if (isPalindrome(substring)) {
20+
return substring;
21+
}
22+
}
23+
}
24+
};
25+
26+
var result = "";
27+
for (let i = 0; i < s.length; i++) {
28+
const palindrome = testSubstring(s.slice(i, s.length), result.length);
29+
30+
if (palindrome.length > result.length) {
31+
result = palindrome;
32+
}
33+
}
34+
return result;
35+
};
36+
37+
console.log(
38+
longestPalindrome(
39+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
40+
)
41+
);

0 commit comments

Comments
 (0)