Skip to content

Commit 1e34da5

Browse files
committed
Next Permutation solution
1 parent fbe57b9 commit 1e34da5

File tree

4 files changed

+252
-0
lines changed

4 files changed

+252
-0
lines changed

0-reverseLinkedList.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
reverseList = (head) => {
2+
if (head === null) {
3+
return null;
4+
}
5+
let reverseListIteratively = (prev, node, next) => {
6+
node.next = prev;
7+
if (next === null) {
8+
return node;
9+
}
10+
reverseListIteratively(node, next, next.next);
11+
};
12+
13+
console.log(reverseListIteratively(null, head, head.next));
14+
// return reverseListIteratively(null, head, head.next);
15+
};
16+
17+
function ListNode(val, next) {
18+
this.val = val === undefined ? 0 : val;
19+
this.next = next === undefined ? null : next;
20+
}
21+
22+
f = new ListNode(21);
23+
e = new ListNode(19, f);
24+
d = new ListNode(17, e);
25+
c = new ListNode(20, d);
26+
b = new ListNode(18, c);
27+
a = new ListNode(16, b);
28+
29+
printLinkedList = (head) => {
30+
let node = head;
31+
while (node !== null) {
32+
console.log(node);
33+
node = node.next;
34+
}
35+
};
36+
37+
let reverseListIteratively = (prev, node, next) => {
38+
node.next = prev;
39+
if (next === null) {
40+
console.log(node);
41+
return node;
42+
}
43+
reverseListIteratively(node, next, next.next);
44+
};
45+
46+
console.log(reverseListIteratively(null, a, a.next));
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @param {string} s
3+
* @param {string[]} words
4+
* @return {number[]}
5+
*/
6+
var findSubstring = function (s, words) {
7+
if (s === "" || words.length === 0) {
8+
return [];
9+
}
10+
11+
let lengths = words.map((el) => el.length);
12+
13+
const unique = (val, index, self) => {
14+
return index === self.indexOf(val);
15+
};
16+
17+
lengths = lengths.filter(unique);
18+
19+
let
20+
21+
// let result = [];
22+
23+
// testWindow = (index, allWordCombinations) => {
24+
// let window = s.slice(index, index + allWordCombinations[0].length);
25+
// for (let i = 0; i < allWordCombinations.length; i++) {
26+
// if (window === allWordCombinations[i]) {
27+
// result.push(index);
28+
// }
29+
// }
30+
// };
31+
32+
// for (let i = 0; i <= s.length + allWordCombinations[0].length; i++) {
33+
// testWindow(i, allWordCombinations);
34+
// }
35+
36+
// return result;
37+
};
38+
39+
console.log(
40+
findSubstring("wordgoodgoodgoodbestword", ["wordg", "godh", "bestdgr", "good"])
41+
);

31-nextPermutation.js

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {void} Do not return anything, modify nums in-place instead.
4+
*/
5+
// var nextPermutation = function (nums) {
6+
// if (nums.)
7+
8+
// let convertArrayToNum = (arr) => {
9+
// let result = 0;
10+
// for (let i = 0; i < arr.length; i++) {
11+
// result *= 10;
12+
// result += arr[i];
13+
// }
14+
// return result;
15+
// };
16+
17+
// let findAllPermutations = (arr) => {
18+
// let allPermutations = [];
19+
20+
// let findAllPermutationsRecursively = (arr, toAdd) => {
21+
// if (arr.length === 0) {
22+
// allPermutations.push(toAdd);
23+
// }
24+
// for (let i = 0; i < arr.length; i++) {
25+
// let num = toAdd * 10 + arr[i];
26+
// let newArr = arr
27+
// .slice(0, i)
28+
// .concat(arr.slice(i + 1, arr.length));
29+
// findAllPermutationsRecursively(newArr, num);
30+
// }
31+
// };
32+
33+
// findAllPermutationsRecursively(arr, 0);
34+
35+
// return allPermutations;
36+
// };
37+
38+
// let mergeSort = function (array) {
39+
// let merge = function (firstArray, secondArray) {
40+
// let i = 0;
41+
// let j = 0;
42+
// let result = [];
43+
// while (true) {
44+
// if (firstArray[i] < secondArray[j]) {
45+
// result.push(firstArray[i]);
46+
// i++;
47+
// } else {
48+
// result.push(secondArray[j]);
49+
// j++;
50+
// }
51+
52+
// if (i === firstArray.length) {
53+
// return result.concat(
54+
// secondArray.slice(j, secondArray.length)
55+
// );
56+
// } else if (j === secondArray.length) {
57+
// return result.concat(
58+
// firstArray.slice(i, firstArray.length)
59+
// );
60+
// }
61+
// }
62+
// };
63+
64+
// if (array.length === 1) {
65+
// return array;
66+
// }
67+
// const middleIndex = Math.floor(array.length / 2);
68+
// const firstArray = mergeSort(array.slice(0, middleIndex));
69+
// const secondArray = mergeSort(array.slice(middleIndex, array.length));
70+
// const merged = merge(firstArray, secondArray);
71+
// return merged;
72+
// };
73+
74+
// let convertNumToArray = (num) => {
75+
// let result = [];
76+
77+
// while (num !== 0) {
78+
// let remainder = num % 10;
79+
// num = Math.floor(num / 10);
80+
// result = [remainder].concat(result);
81+
// }
82+
83+
// return result;
84+
// };
85+
86+
// let sortedPermutations = mergeSort(findAllPermutations(nums));
87+
// let num = convertArrayToNum(nums);
88+
// let index = sortedPermutations.indexOf(num);
89+
90+
// if (index + 1 === sortedPermutations.length) {
91+
// index = 0;
92+
// } else {
93+
// index++;
94+
// }
95+
96+
// let nextNum = sortedPermutations[index];
97+
98+
// return convertNumToArray(nextNum);
99+
// };
100+
101+
let nextPermutation = function (nums) {
102+
let mergeSort = function (array) {
103+
let merge = function (firstArray, secondArray) {
104+
let i = 0;
105+
let j = 0;
106+
let result = [];
107+
while (true) {
108+
if (firstArray[i] < secondArray[j]) {
109+
result.push(firstArray[i]);
110+
i++;
111+
} else {
112+
result.push(secondArray[j]);
113+
j++;
114+
}
115+
116+
if (i === firstArray.length) {
117+
return result.concat(
118+
secondArray.slice(j, secondArray.length)
119+
);
120+
} else if (j === secondArray.length) {
121+
return result.concat(
122+
firstArray.slice(i, firstArray.length)
123+
);
124+
}
125+
}
126+
};
127+
128+
if (array.length === 1) {
129+
return array;
130+
}
131+
const middleIndex = Math.floor(array.length / 2);
132+
const firstArray = mergeSort(array.slice(0, middleIndex));
133+
const secondArray = mergeSort(array.slice(middleIndex, array.length));
134+
const merged = merge(firstArray, secondArray);
135+
return merged;
136+
};
137+
138+
for (let i = nums.length - 1; i >= 0; i--) {
139+
let first = nums[i];
140+
let second = nums[i - 1];
141+
142+
if (!second && second !== 0) {
143+
let sorted = mergeSort(nums);
144+
console.log("here");
145+
for (let i = 0; i < nums.length; i++) {
146+
nums[i] = sorted[i];
147+
}
148+
return nums;
149+
}
150+
151+
if (first > second) {
152+
let secondHalf = mergeSort(nums.slice(i, nums.length));
153+
nums[i - 1] = secondHalf.find((el) => el > second);
154+
let firstHalf = nums.slice(0, i);
155+
let index = secondHalf.indexOf(nums[i - 1]);
156+
secondHalf[index] = second;
157+
for (let i = 0; i < nums.length; i++) {
158+
nums[i] = firstHalf.concat(mergeSort(secondHalf))[i];
159+
}
160+
return nums;
161+
}
162+
}
163+
};
164+
165+
console.log(nextPermutation([2, 2, 0, 4, 3, 1]));
File renamed without changes.

0 commit comments

Comments
 (0)