mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2026-04-13 18:09:50 +08:00
feat: scaffold monorepo
This commit is contained in:
@@ -3,10 +3,10 @@ function graphTopoSort(numberNodes, edges) {
|
||||
const order = [];
|
||||
const queue = [];
|
||||
for (let i = 0; i < numberNodes; i++) {
|
||||
nodes.set(i, {in: 0, out: new Set()});
|
||||
nodes.set(i, { in: 0, out: new Set() });
|
||||
}
|
||||
|
||||
edges.forEach(edge => {
|
||||
edges.forEach((edge) => {
|
||||
const [node_id, pre_id] = edge;
|
||||
nodes.get(node_id).in += 1;
|
||||
nodes.get(pre_id).out.add(node_id);
|
||||
@@ -32,4 +32,9 @@ function graphTopoSort(numberNodes, edges) {
|
||||
return order.length == numberNodes ? order : [];
|
||||
}
|
||||
|
||||
console.log(graphTopoSort(3, [[0, 1], [0, 2]]));
|
||||
console.log(
|
||||
graphTopoSort(3, [
|
||||
[0, 1],
|
||||
[0, 2],
|
||||
]),
|
||||
);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
function matrixClone(matrix, defaultValue) {
|
||||
return matrix.map(row => {
|
||||
return matrix.map((row) => {
|
||||
return defaultValue === undefined
|
||||
? row.slice(0)
|
||||
: Array(row.length).fill(defaultValue);
|
||||
@@ -9,14 +9,53 @@ function matrixClone(matrix, defaultValue) {
|
||||
const deepEqual = require('./deepEqual');
|
||||
|
||||
// Test clone.
|
||||
const a = [[1, 2], [1, 4]];
|
||||
console.log(deepEqual(matrixClone(a), [[1, 2], [1, 4]]));
|
||||
const a = [
|
||||
[1, 2],
|
||||
[1, 4],
|
||||
];
|
||||
console.log(
|
||||
deepEqual(matrixClone(a), [
|
||||
[1, 2],
|
||||
[1, 4],
|
||||
]),
|
||||
);
|
||||
a[0][0] = 4;
|
||||
console.log(deepEqual(matrixClone(a), [[1, 2], [1, 4]]) === false);
|
||||
console.log(
|
||||
deepEqual(matrixClone(a), [
|
||||
[1, 2],
|
||||
[1, 4],
|
||||
]) === false,
|
||||
);
|
||||
console.log(deepEqual(matrixClone([[1]]), [[1]]));
|
||||
|
||||
// Test clone with default value.
|
||||
console.log(deepEqual(matrixClone([[1, 2], [1, 4]], 1), [[1, 1], [1, 1]]));
|
||||
console.log(
|
||||
deepEqual(matrixClone([[1, 2], [1, 4]], null), [[null, null], [null, null]]),
|
||||
deepEqual(
|
||||
matrixClone(
|
||||
[
|
||||
[1, 2],
|
||||
[1, 4],
|
||||
],
|
||||
1,
|
||||
),
|
||||
[
|
||||
[1, 1],
|
||||
[1, 1],
|
||||
],
|
||||
),
|
||||
);
|
||||
console.log(
|
||||
deepEqual(
|
||||
matrixClone(
|
||||
[
|
||||
[1, 2],
|
||||
[1, 4],
|
||||
],
|
||||
null,
|
||||
),
|
||||
[
|
||||
[null, null],
|
||||
[null, null],
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -1,12 +1,33 @@
|
||||
function matrixTranspose(matrix) {
|
||||
return matrix[0].map((col, i) => matrix.map(row => row[i]));
|
||||
return matrix[0].map((col, i) => matrix.map((row) => row[i]));
|
||||
}
|
||||
|
||||
const deepEqual = require('./deepEqual');
|
||||
|
||||
console.log(deepEqual(matrixTranspose([[1]]), [[1]]));
|
||||
console.log(deepEqual(matrixTranspose([[1, 2]]), [[1], [2]]));
|
||||
console.log(deepEqual(matrixTranspose([[1, 2], [1, 4]]), [[1, 1], [2, 4]]));
|
||||
console.log(
|
||||
deepEqual(matrixTranspose([[1, 2, 3], [4, 5, 6]]), [[1, 4], [2, 5], [3, 6]]),
|
||||
deepEqual(
|
||||
matrixTranspose([
|
||||
[1, 2],
|
||||
[1, 4],
|
||||
]),
|
||||
[
|
||||
[1, 1],
|
||||
[2, 4],
|
||||
],
|
||||
),
|
||||
);
|
||||
console.log(
|
||||
deepEqual(
|
||||
matrixTranspose([
|
||||
[1, 2, 3],
|
||||
[4, 5, 6],
|
||||
]),
|
||||
[
|
||||
[1, 4],
|
||||
[2, 5],
|
||||
[3, 6],
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
function traverse(matrix) {
|
||||
const DIRECTIONS = [[0, 1], [0, -1], [1, 0], [-1, 0]];
|
||||
const DIRECTIONS = [
|
||||
[0, 1],
|
||||
[0, -1],
|
||||
[1, 0],
|
||||
[-1, 0],
|
||||
];
|
||||
const rows = matrix.length;
|
||||
const cols = matrix[0].length;
|
||||
const visited = matrix.map(row => Array(row.length).fill(false));
|
||||
const visited = matrix.map((row) => Array(row.length).fill(false));
|
||||
function dfs(i, j) {
|
||||
if (visited[i][j]) {
|
||||
return;
|
||||
}
|
||||
visited[i][j] = true;
|
||||
DIRECTIONS.forEach(dir => {
|
||||
DIRECTIONS.forEach((dir) => {
|
||||
const row = i + dir[0],
|
||||
col = j + dir[1];
|
||||
// Boundary check.
|
||||
|
||||
@@ -37,26 +37,14 @@ console.log(deepEqual(mergeSort([2, 1]), [1, 2]));
|
||||
console.log(deepEqual(mergeSort([7, 2, 4, 3, 1, 2]), [1, 2, 2, 3, 4, 7]));
|
||||
console.log(deepEqual(mergeSort([1, 2, 3, 4, 5, 0]), [0, 1, 2, 3, 4, 5]));
|
||||
console.log(
|
||||
deepEqual(mergeSort([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]), [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
]),
|
||||
deepEqual(
|
||||
mergeSort([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]),
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
||||
),
|
||||
);
|
||||
console.log(
|
||||
deepEqual(mergeSort([98322, 3242, 876, -234, 34, 12331]), [
|
||||
-234,
|
||||
34,
|
||||
876,
|
||||
3242,
|
||||
12331,
|
||||
98322,
|
||||
]),
|
||||
deepEqual(
|
||||
mergeSort([98322, 3242, 876, -234, 34, 12331]),
|
||||
[-234, 34, 876, 3242, 12331, 98322],
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user