Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added task_01/src/main
Binary file not shown.
37 changes: 36 additions & 1 deletion task_01/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
#include <iostream>
#include <stdexcept>
#include <vector>

int main() { return 0; }
#include "task_01.hpp"

std::vector<int> find_two_nums(int val, std::vector<int> arr) {
std::vector<int> 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<int> 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;
}
19 changes: 19 additions & 0 deletions task_01/src/task_01.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#include "task_01.hpp"

std::vector<int> find_nums(int val, std::vector<int> arr) {
std::vector<int> 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;
}
}
};
3 changes: 3 additions & 0 deletions task_01/src/task_01.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include <vector>

std::vector<int> find_nums(int val, std::vector<int> arr);
Binary file added task_02/src/main
Binary file not shown.
33 changes: 32 additions & 1 deletion task_02/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,34 @@
#include <iostream>

int main() { return 0; }
#include "stack.hpp"
// #include "stack.cpp"

int main() {
std::vector<int> vs{5, 4, 3, 7, 8};
Stack<int> 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<int> vsm{2, 1, 1, 1, 1};
MinStack<int> 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;
}
21 changes: 0 additions & 21 deletions task_02/src/stack.cpp

This file was deleted.

89 changes: 81 additions & 8 deletions task_02/src/stack.hpp
Original file line number Diff line number Diff line change
@@ -1,23 +1,96 @@
#pragma once

#include <stack>
#include <stdexcept>
#include <vector>

template <typename T>
class Stack {
public:
void Push(int value);
int Pop();
Stack(){};
Stack(std::vector<T> 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<int> data_;
std::vector<T> data_;
};

template <typename T>
class MinStack {
public:
void Push(int value);
int Pop();
int GetMin();
MinStack(){};
MinStack(std::vector<T> 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<int> data_;
std::vector<T> data_;
std::vector<T> data_mins;
};

template <typename T>
class MaxStack {
public:
MaxStack(){};
MaxStack(std::vector<T> 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<T> data_;
std::vector<T> data_maxs;
};
74 changes: 37 additions & 37 deletions task_02/src/test.cpp
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@

#include <gtest/gtest.h>
// #include <gtest/gtest.h>

#include <stack>
// #include <stack>

#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 []
}
// 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 []
// }
13 changes: 12 additions & 1 deletion task_03/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
#include <iostream>
#include <stack>
#include <vector>

int main() { return 0; }
#include "topology_sort.hpp"

int main() {
std::vector<int> data{0, 2, 4, -5, 12, 16, -1, -1, -5, 4};
std::vector<int> res{heater_days(data)};
for (int val : res) {
std::cout << val << " ";
}
return 0;
}
17 changes: 17 additions & 0 deletions task_03/src/topology_sort.cpp
Original file line number Diff line number Diff line change
@@ -1 +1,18 @@
#include "topology_sort.hpp"

std::vector<int> heater_days(std::vector<int>& temperatures) {
int n = temperatures.size();
std::vector<int> result(n, 0);
std::stack<int> 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;
}
4 changes: 4 additions & 0 deletions task_03/src/topology_sort.hpp
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
#pragma once
#include <stack>
#include <vector>

std::vector<int> heater_days(std::vector<int>& temperatures);
Binary file added task_05/src/main
Binary file not shown.
Loading