HowTo algorithms for interview

Как строится алгоритмическая секция интервью

Курс от Яндекса "Подготовка к алгоритмическому собеседованию"

Big-O Complexity Chart

What

Несколько задач на время. Даны входные и выходные данные. Написать алгоритм

Как решать задачи

Практика

  • (priority 0) Neetcode Платформа с подборками зада по темам с ссылками на Leetcode

  • (priority 1) Таблица с сортировкой по Leedcode задачам (сложность, компания)

  • (priority 2) Как повторение 75 задач, для того чтобы перерешать Grind75

  • (priority 3) Курс от Яндекса "Основы алгоритмов"

Теория

Использованы статьи для составления плана ССЫЛКА

Plan for now

  1. go through templates LINK

  2. Heap, trees, graph, DP

Рекомендуем повторить все, что связано с алгоритмами:

  • основные структуры данных — строки, списки (LinkedList), деревья, ассоциативные массивы (HashMap, TreeMap, LinkedHashMap), векторы;

  • базовые алгоритмы — поиск элементов в коллекциях, обход деревьев, сортировки, динамическое программирование;

  • понятие сложности алгоритмов, O-нотация.

Пример задачи

Даны три неубывающих массива чисел. Найти число, которое присутствует во всех трех массивах.

Input: [1,2,4,5], [3,3,4], [2,3,4,5,6]
Output: 4

Целевое решение работает за O(p + q + r), где p, q, r – длины массивов, доп. память O(1), но эту информацию интервьюер не сообщает.

public int findCommonElement(int[] arr1, int[] arr2, int[] arr3) {
        int p1 = 0, p2 = 0, p3 = 0;

        while (p1 < arr1.length && p2 < arr2.length && p3 < arr3.length) {
            if (arr1[p1] == arr2[p2] && arr2[p2] == arr3[p3]) {
                return arr1[p1];
            } else if (arr1[p1] <= arr2[p2] && arr1[p1] <= arr3[p3]) {
                p1++;
            } else if (arr2[p2] <= arr1[p1] && arr2[p2] <= arr3[p3]) {
                p2++;
            } else {
                p3++;
            }
        }
        return -1; // Если нет общего числа во всех трех массивах
    }

Last updated