Skip to content

Instantly share code, notes, and snippets.

View vitkarpov's full-sized avatar

Viktor Karpov vitkarpov

View GitHub Profile
@vitkarpov
vitkarpov / cracking-the-coding-interview-3-5.js
Created March 6, 2017 17:56
"Cracking the coding interview", Stacks and Queues, 3.5
/**
* Реализует очередь с помощью двух стеков.
*
* @example
* const q = new MyQueue();
* q.add(10);
* q.add(12);
* q.add(15);
* q.add(17);
* // 10
@vitkarpov
vitkarpov / cracking-the-coding-interview-4-1.js
Last active March 9, 2017 08:07
"Cracking the coding interview", Graphs, 4.1
/**
* Обходит граф в ширину, проверяя существует ли маршрут
* между указанными нодами.
* Предполагается, что граф представлен в виде списка смежности,
* проще говоря, массива где индексами являются элементы, в значениями
* массивы с дочерними элементами.
*
* @param {Array} graph
* @param {Number} start
* @param {Number} end
@vitkarpov
vitkarpov / graph-example.js
Last active March 9, 2017 08:14
Graph example
/**
* Представление графа в виде списка смежности:
* индексу соответствует родительскому элементу,
* а значению — массив с дочерними элементами.
*/
const graph = [
null,
null,
null,
[8,10],
@vitkarpov
vitkarpov / cracking-the-coding-interview-4-2.js
Created March 12, 2017 07:09
"Cracking the coding interview", Trees and Graphs, 4.2
/**
* Конструктор узла дерева.
* Каждый узел имеет 2 ссылки: левую и правую части поддерева.
*/
class Node {
constructor(data) {
this.data = data;
this.left = null;
this.right = null;
}
@vitkarpov
vitkarpov / insert-a-node-into-bst.js
Created March 12, 2017 09:55
Recursive inserting a node into a binary search tree
/**
* Рекурсивно проходится по бинарному дереву от корня,
* пока не найдет подходящее место для нового узла.
* Каждая вставка требует обход дерева, т.е. O(log N),
* поэтому время работы для создания бинарного дерева O(n * log N)
*/
function insertNodeIntoBST(root, node) {
if (root.data < node.data) {
if (root.right === null) {
root.right = node;
@vitkarpov
vitkarpov / cracking-the-coding-interview-8-1.js
Created March 16, 2017 20:05
"Cracking the coding interview", 8.1
/**
* Находит количество всех возможных вариантов
* как можно добраться до n-й ступени по лестнице,
* если можно пройти 1, 2 или 3 ступени за один шаг.
*
* @param {number} n
* @returns {number}
*/
function countWays(n) {
if (n < 0) {
@vitkarpov
vitkarpov / cracking-the-coding-interview-8-1-2.js
Created March 17, 2017 04:51
"Cracking the coding interview", 8.1.2
/**
* Находит количество всех возможных вариантов
* как можно добраться до n-й ступени по лестнице,
* если можно пройти 1, 2 или 3 ступени за один шаг.
*
* Используется кеш, ссылка на который передается вторым аргументом
* через все рекурсивные вызовы функции.
*
* @param {number} n
* @param {array<number>} cache
@vitkarpov
vitkarpov / cracking-the-coding-interview-10-1.js
Last active March 18, 2017 17:59
"Cracking the coding interview", sorting, 10.1
/**
* Сливает два отсортированных массива.
* Результат окажется в первом массиве,
* в котором есть дополнительное место для второго массива.
*
* @example
* const a = [1,3,4];
* const b = [2,3,5];
* merge(a, b);
* // [1,2,3,3,4,5]
@vitkarpov
vitkarpov / cracking-the-coding-interview-1-4.js
Last active March 23, 2017 07:13
"Cracking the coding interview", strings, 1.4
/**
* Проверяет является ли переданная строка
* перестановкой палиндрома.
* Работает за O(n) и требует O(n) дополнительной памяти.
*
* @param {string} str
* @returns {boolean}
*/
function isPalindromPermutation(str) {
const counters = {};
@vitkarpov
vitkarpov / cracking-the-coding-interview-1-4-2.js
Last active March 23, 2017 18:54
"Cracking the coding interview", strings, 1.4.2
/**
* Проверяет является ли переданная строка
* перестановкой палиндрома.
* Работает за O(n) и не требует дополнительной памяти,
* использует битовый вектор для хранения счетчиков.
*
* @param {string} str
* @returns {boolean}
*/
function isPalindromePermutation(str) {