Ханойская башня
• Есть три башни. Цель игры состоит в том, чтобы переместить все диски на третью башню, но вы не можете поместить диск большего размера на диск меньшего размера
• Необходимо создать функцию, которая принимает число дисков в качестве аргумента и возвращает минимальное количество шагов, необходимое для завершения игры
Подсказки
• Можно использовать библиотеку <cmath>
• Можно использовать функцию возведения в степень pow
Tower of Hanoi (edabit)
#middle #algorithms #tasks
Решение
#include  <cmath> 
int towerHanoi(int discs) { 
return pow(2, discs) — 1; 
} 
• Есть три башни. Цель игры состоит в том, чтобы переместить все диски на третью башню, но вы не можете поместить диск большего размера на диск меньшего размера
• Необходимо создать функцию, которая принимает число дисков в качестве аргумента и возвращает минимальное количество шагов, необходимое для завершения игры
Подсказки
• Можно использовать библиотеку <cmath>
• Можно использовать функцию возведения в степень pow
Tower of Hanoi (edabit)
#middle #algorithms #tasks
Решение
❤1
  ⚙️ Search in a Binary Search Tree
В задаче требуется реализовать поиск по бинарному дереву
Подход к решению
- Реализуется с помощью рекурсивного алгоритма
- Сначала обходим левое поддерево, а затем правое
#tasks #middle
Решение
class Solution { 
public: 
TreeNode* searchBST(TreeNode* root, int val) { 
if (!root)  
return nullptr; 
if (root->val == val) 
return root; 
if (val < root->val) 
return searchBST(root->left, val); 
else 
return searchBST(root->right, val); 
} 
}; 
В задаче требуется реализовать поиск по бинарному дереву
Подход к решению
- Реализуется с помощью рекурсивного алгоритма
- Сначала обходим левое поддерево, а затем правое
#tasks #middle
Решение
👍2
  🧿 Задача Простая пара
Дан массив целых чисел arr и целое число n. Найдите из данного массива пару чисел [x, y] такую, что x * y = n. Если пара не найдена, вернуть [0, 0]
👉A Simple Pair (edabit)
#middle #tasks
Решение
std::pair simplePair(std::vector arr, int n) { 
for (int i = 0; i < arr.size()-1; ++i) { 
for (int j = i+1; j < arr.size(); ++j) { 
if (arr[i] * arr[j] == n) { 
return std::make_pair(arr[i], arr[j]); 
} 
} 
} 
return std::make_pair( 0, 0 ); 
} 
Дан массив целых чисел arr и целое число n. Найдите из данного массива пару чисел [x, y] такую, что x * y = n. Если пара не найдена, вернуть [0, 0]
👉A Simple Pair (edabit)
#middle #tasks
Решение
👍1
  ⚙️ Задача How Many Numbers Are Smaller Than the Current Number
Для каждого элемента массива посчитать количество элементов меньше и вывести результат в виде массива
Пример
Input: nums = [8,1,2,2,3]
Output: [4,0,1,1,3]
Ограничения
- Значение элемента лежит между значениями 0 и 100
- Длина самого массива не меньше 2-х и не больше 500-а
👉How Many Numbers Are Smaller Than the Current Number (leetcode)
#tasks #middle
Решение
class Solution { 
public: 
vector smallerNumbersThanCurrent(vector& nums) { 
vector ans; 
vector nums_count(101); 
for (const int num : nums){ 
++nums_count[num]; 
} 
for (int i = 1; i <= 100; ++i) { 
nums_count[i] += nums_count[i — 1]; 
} 
for (const int num : nums) { 
ans.push_back(num == 0 ? 0 : nums_count[num — 1]); 
} 
return ans; 
} 
}; 
Для каждого элемента массива посчитать количество элементов меньше и вывести результат в виде массива
Пример
Input: nums = [8,1,2,2,3]
Output: [4,0,1,1,3]
Ограничения
- Значение элемента лежит между значениями 0 и 100
- Длина самого массива не меньше 2-х и не больше 500-а
👉How Many Numbers Are Smaller Than the Current Number (leetcode)
#tasks #middle
Решение
👍2
  ⏰ Задача Minimum Number of Operations to Move All Balls to Each Box (leetcode)
Во входных данных даётся массив, каждый элемент массива это коробка. В коробке может быть шарик. Необходимо посчитать сколько нужно действий чтобы переложить все шарики в одну коробку (минимальное количество), для каждой коробки
Пример 1
Input: boxes = «110»
Output: [1,1,3]
Пример 2
Input: boxes = «001011»
Output: [11,8,5,4,3,4]
👉 Ссылка
#tasks #middle
Решение (brute force)
class Solution { 
public: 
std::vector minOperations(std::string boxes) { 
std::vector result; 
for (int i = 0; i < boxes.length(); ++i) { 
int count = 0; 
for (int j = 0; j < boxes.length(); ++j) { 
if (boxes[j] == '1') { 
count += std::abs(i — j); 
} 
} 
result.push_back(count); 
} 
return result; 
} 
}; 
Во входных данных даётся массив, каждый элемент массива это коробка. В коробке может быть шарик. Необходимо посчитать сколько нужно действий чтобы переложить все шарики в одну коробку (минимальное количество), для каждой коробки
Пример 1
Input: boxes = «110»
Output: [1,1,3]
Пример 2
Input: boxes = «001011»
Output: [11,8,5,4,3,4]
👉 Ссылка
#tasks #middle
Решение (brute force)
😁4🤔2
  