diff --git a/task_01/src/main b/task_01/src/main new file mode 100755 index 0000000..695ad5e Binary files /dev/null and b/task_01/src/main differ diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 0e4393b..eda794c 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,3 +1,38 @@ #include +#include +#include -int main() { return 0; } +#include "task_01.hpp" + +std::vector find_two_nums(int val, std::vector arr) { + std::vector ans{}; + int* p_begin = &arr[0]; + int* p_end = &arr[arr.size() - 1]; + while (p_begin != p_end) { + int real_val = *p_begin + *p_end; + if (real_val < val) { + p_begin += 1; + } else if (real_val > val) { + p_end -= 1; + } else { + ans.push_back(*p_begin); + ans.push_back(*p_end); + return ans; + } + } + throw std::runtime_error("Нет таких чисел"); +}; + +int main() { + std::vector test = {1, 2, 4, 5, 7, 10}; + int a = 0; + // int* p_begin = &test[0]; + // int* p_end = &test[test.size() - 1]; + // std::cout << *p_begin +*p_end << std::endl; + // std::cout << find_nums(a, test)[0] << " " << find_nums(a, test)[1] << + // std::endl; + test.back(); + a = test.back(); + std::cout << a << std::endl; + return 0; +} diff --git a/task_01/src/task_01.cpp b/task_01/src/task_01.cpp new file mode 100644 index 0000000..b3663bd --- /dev/null +++ b/task_01/src/task_01.cpp @@ -0,0 +1,19 @@ +#include "task_01.hpp" + +std::vector find_nums(int val, std::vector arr) { + std::vector ans{}; + int* p_begin = &arr[0]; + int* p_end = &arr[-1]; + while (p_begin != p_end) { + int real_val = *p_begin + *p_end; + if (real_val < val) { + p_begin += 1; + } else if (real_val > val) { + p_end -= 1; + } else { + ans.push_back(*p_begin); + ans.push_back(*p_end); + return ans; + } + } +}; \ No newline at end of file diff --git a/task_01/src/task_01.hpp b/task_01/src/task_01.hpp new file mode 100644 index 0000000..9ff3c2e --- /dev/null +++ b/task_01/src/task_01.hpp @@ -0,0 +1,3 @@ +#include + +std::vector find_nums(int val, std::vector arr); \ No newline at end of file diff --git a/task_02/src/main b/task_02/src/main new file mode 100755 index 0000000..adf205a Binary files /dev/null and b/task_02/src/main differ diff --git a/task_02/src/main.cpp b/task_02/src/main.cpp index 0e4393b..eacb0a9 100644 --- a/task_02/src/main.cpp +++ b/task_02/src/main.cpp @@ -1,3 +1,34 @@ #include -int main() { return 0; } +#include "stack.hpp" +// #include "stack.cpp" + +int main() { + std::vector vs{5, 4, 3, 7, 8}; + Stack st{vs}; + // st.push(5); + // st.push(4); + // st.push(3); + // st.push(7); + // st.push(8); + // std::cout << st.pop() << " " << st.pop() << " " << st.pop() << " " << + // st.pop() << " "; st.push(0); std::cout << st.pop() << " " << st.pop(); + + std::vector vsm{2, 1, 1, 1, 1}; + MinStack stm{vsm}; + // stm.push(5); + // stm.push(7); + // stm.push(3); + // stm.push(0); + // stm.push(1); + // stm.push(-2); + std::cout << stm.getmin() << std::endl; + std::cout << stm.pop() << " " << stm.getmin() << std::endl; + std::cout << stm.pop() << " " << stm.getmin() << std::endl; + std::cout << stm.pop() << " " << stm.getmin() << std::endl; + std::cout << stm.pop() << " " << stm.getmin() << std::endl; + std::cout << stm.pop() << " " << stm.getmin() << std::endl; + std::cout << stm.pop() << " " << stm.getmin(); + // std::cout << stm.getmin() << stm.getmin() << stm.getmin(); + return 0; +} diff --git a/task_02/src/stack.cpp b/task_02/src/stack.cpp deleted file mode 100644 index 8ca8990..0000000 --- a/task_02/src/stack.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "stack.hpp" - -#include - -void Stack::Push(int value) { data_.push(value); } - -int Stack::Pop() { - auto result = data_.top(); - data_.pop(); - return result; -} - -void MinStack::Push(int value) { data_.push_back(value); } - -int MinStack::Pop() { - auto result = data_.back(); - data_.pop_back(); - return result; -} - -int MinStack::GetMin() { return *std::min_element(data_.begin(), data_.end()); } \ No newline at end of file diff --git a/task_02/src/stack.hpp b/task_02/src/stack.hpp index 138ec40..a9b43f6 100644 --- a/task_02/src/stack.hpp +++ b/task_02/src/stack.hpp @@ -1,23 +1,96 @@ #pragma once -#include +#include #include +template class Stack { public: - void Push(int value); - int Pop(); + Stack(){}; + Stack(std::vector vec) { + for (auto val : vec) { + push(val); + } + } + void push(T value) { data_.push_back(value); } + T pop() { + T result = data_.back(); + data_.pop_back(); + return result; + } private: - std::stack data_; + std::vector data_; }; +template class MinStack { public: - void Push(int value); - int Pop(); - int GetMin(); + MinStack(){}; + MinStack(std::vector vec) { + for (auto val : vec) { + push(val); + } + } + void push(T value) { + data_.push_back(value); + if (data_mins.size() == 0 || value <= data_mins.back()) { + data_mins.push_back(value); + } else { + data_mins.push_back(data_mins.back()); + } + } + T pop() { + T result = data_.back(); + data_.pop_back(); + data_mins.pop_back(); + return result; + } + + T getmin() { + if (data_mins.size() == 0) { + throw std::runtime_error("Пустой стек - нет минимума"); + } + return data_mins.back(); + } private: - std::vector data_; + std::vector data_; + std::vector data_mins; }; + +template +class MaxStack { + public: + MaxStack(){}; + MaxStack(std::vector vec) { + for (auto val : vec) { + push(val); + } + } + void push(T value) { + data_.push_back(value); + if (data_maxs.size() == 0 || value >= data_maxs.back()) { + data_maxs.push_back(value); + } else { + data_maxs.push_back(data_maxs.back()); + } + } + T pop() { + T result = data_.back(); + data_.pop_back(); + data_maxs.pop_back(); + return result; + } + + T getmax() { + if (data_maxs.size() == 0) { + throw std::runtime_error("Пустой стек - нет минимума"); + } + return data_maxs.back(); + } + + private: + std::vector data_; + std::vector data_maxs; +}; \ No newline at end of file diff --git a/task_02/src/test.cpp b/task_02/src/test.cpp index 54e7ce9..001c475 100644 --- a/task_02/src/test.cpp +++ b/task_02/src/test.cpp @@ -1,42 +1,42 @@ -#include +// #include -#include +// #include -#include "stack.hpp" +// #include "stack.hpp" -TEST(StackTest, Simple) { - Stack stack; - stack.Push(1); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - stack.Push(3); // Stack [1, 3] - ASSERT_EQ(stack.Pop(), 3); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] -} +// TEST(StackTest, Simple) { +// Stack stack; +// stack.Push(1); // Stack [1] +// ASSERT_EQ(stack.Pop(), 1); // Stack [] +// stack.Push(1); // Stack [1] +// stack.Push(2); // Stack [1, 2] +// ASSERT_EQ(stack.Pop(), 2); // Stack [1] +// ASSERT_EQ(stack.Pop(), 1); // Stack [] +// stack.Push(1); // Stack [1] +// stack.Push(2); // Stack [1, 2] +// ASSERT_EQ(stack.Pop(), 2); // Stack [1] +// stack.Push(3); // Stack [1, 3] +// ASSERT_EQ(stack.Pop(), 3); // Stack [1] +// ASSERT_EQ(stack.Pop(), 1); // Stack [] +// } -TEST(MinStackTest, Simple) { - MinStack stack; - stack.Push(1); // Stack [1] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - stack.Push(3); // Stack [1, 3] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 3); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] -} \ No newline at end of file +// TEST(MinStackTest, Simple) { +// MinStack stack; +// stack.Push(1); // Stack [1] +// ASSERT_EQ(stack.GetMin(), 1); +// ASSERT_EQ(stack.Pop(), 1); // Stack [] +// stack.Push(1); // Stack [1] +// stack.Push(2); // Stack [1, 2] +// ASSERT_EQ(stack.GetMin(), 1); +// ASSERT_EQ(stack.Pop(), 2); // Stack [1] +// ASSERT_EQ(stack.Pop(), 1); // Stack [] +// stack.Push(1); // Stack [1] +// stack.Push(2); // Stack [1, 2] +// ASSERT_EQ(stack.GetMin(), 1); +// ASSERT_EQ(stack.Pop(), 2); // Stack [1] +// stack.Push(3); // Stack [1, 3] +// ASSERT_EQ(stack.GetMin(), 1); +// ASSERT_EQ(stack.Pop(), 3); // Stack [1] +// ASSERT_EQ(stack.Pop(), 1); // Stack [] +// } \ No newline at end of file diff --git a/task_03/src/main.cpp b/task_03/src/main.cpp index 0e4393b..74e0f86 100644 --- a/task_03/src/main.cpp +++ b/task_03/src/main.cpp @@ -1,3 +1,14 @@ #include +#include +#include -int main() { return 0; } +#include "topology_sort.hpp" + +int main() { + std::vector data{0, 2, 4, -5, 12, 16, -1, -1, -5, 4}; + std::vector res{heater_days(data)}; + for (int val : res) { + std::cout << val << " "; + } + return 0; +} diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index e53f670..ab0500e 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -1 +1,18 @@ #include "topology_sort.hpp" + +std::vector heater_days(std::vector& temperatures) { + int n = temperatures.size(); + std::vector result(n, 0); + std::stack s; + + for (int i = 0; i < n; ++i) { + while (!s.empty() && temperatures[i] > temperatures[s.top()]) { + int prev_index = s.top(); + s.pop(); + result[prev_index] = i - prev_index; + } + s.push(i); + } + + return result; +} diff --git a/task_03/src/topology_sort.hpp b/task_03/src/topology_sort.hpp index 6f70f09..24fa1e7 100644 --- a/task_03/src/topology_sort.hpp +++ b/task_03/src/topology_sort.hpp @@ -1 +1,5 @@ #pragma once +#include +#include + +std::vector heater_days(std::vector& temperatures); \ No newline at end of file diff --git a/task_05/src/main b/task_05/src/main new file mode 100755 index 0000000..02cee4f Binary files /dev/null and b/task_05/src/main differ diff --git a/task_05/src/main.cpp b/task_05/src/main.cpp index 0e4393b..aca2618 100644 --- a/task_05/src/main.cpp +++ b/task_05/src/main.cpp @@ -1,3 +1,44 @@ #include +#include -int main() { return 0; } +std::vector a = {1, 2, 5}; + +std::vector merge_arrs(std::vector& left, std::vector& right) { + auto p_left = &left[0]; + auto p_right = &right[0]; + std::vector result{}; + while (p_left != &left.back() && p_right != &right.back()) { + if (*p_left <= *p_right) { + result.push_back(*p_left); + p_left += 1; + } else { + result.push_back(*p_right); + p_right += 1; + } + } + return result; +} + +std::vector merge_sort(std::vector& vec) { + if (vec.size() == 1) { + return vec; + } + + std::vector left = + std::vector(vec.begin(), vec.end() - int(vec.size() / 2)); + std::vector right = + std::vector(vec.end() - int(vec.size() / 2) + 1, vec.end()); + left = merge_sort(left); + right = merge_sort(right); + std::vector result = merge_arrs(left, right); + return result; +}; + +int main() { + std::vector a = {1, 5, 3, 7, 9}; + a = merge_sort(a); + for (int i : a) { + std::cout << i << " "; + } + return 0; +} diff --git a/task_07/src/tree.hpp b/task_07/src/tree.hpp new file mode 100644 index 0000000..c927334 --- /dev/null +++ b/task_07/src/tree.hpp @@ -0,0 +1,12 @@ +#include + +class Tree { + public: + int add(int val); + int pop(); + + private: + std::vector data; + int sift_up(int item); + int sift_down(int item); +}; \ No newline at end of file