Здравствуйте, товарищи!

Я постараюсь пройтись по основным темам/задачам и в коротких видео предоставить необходимый теоретический материал, советы по написанию кода и важные, на мой взгляд, замечания, чтобы вы могли уверенно и успешно проходить такого рода интервью.

0. Friendly SWE Guide Manifesto

1. Бинарный поиск

int search(const vector<int>& nums, int target) {
  if (nums.empty()) return -1;

  int l = 0;
  int r = nums.size(); // element after the last!!

  while (l + 1 < r) {
    int m = (l + r) / 2;
    if (a[m] > target) {
      r = m;
    } else {
      l = m;
    }
  }

  return nums[l] == target ? l : -1;
}

2. Быстрое возведение в степень


3. Задача о кузнечике

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


4. Задача о водопаде

Простая задачка на смекалку. Довольно сумбурный разбор - придется смотреть в собранном состоянии.

5. Тупые задачки (на владение языком)

6. Список (структура данных)

7. Массив

8. Перебор (backtracking)

9. Бинарное дерево

class Solution(object):
  def isValidBSTRecursive(self, node, min_value, max_value):
    if node is None:
      return True
    
    # min_value < node.val < max_value
    if min_value is not None and node.val <= min_value:
      return False
    if max_value is not None and node.val >= max_value:
      return False
    
    return (self.isValidBSTRecursive(node.left, min_value, node.val) and
           self.isValidBSTRecursive(node.right, node.val, max_value))
    
  
  def isValidBST(self, root):
    """
    :type root: TreeNode
    :rtype: bool
    """
    return self.isValidBSTRecursive(root, None, None)

10. Бор

11. Графы

12. Комбинаторика

13. Два указателя

14. Динамическое программирование

15. Разделяй и властвуй

16. Бор + Перебор + ДП

Advanced Level (просто интересные задачки)

Теория вероятностей