diff --git a/header/vector.hpp b/header/vector.hpp index 33bb998..e9c9ba5 100644 --- a/header/vector.hpp +++ b/header/vector.hpp @@ -41,6 +41,7 @@ SOFTWARE. #include #include #include +#include namespace mystl{ template concept my_input_iterator = requires(It it) { @@ -660,6 +661,51 @@ class Vector{ } return Iterator(arr + end); } + public: //sliding window + bool sub_equal(std::size_t count,std::size_t target){ + //purpose return true if there subarray sum equal to target + //use sliding window algorithm + //expected O(n) + // + if(size == 0){ + return false; + } + std::size_t sum = 0; + for(std::size_t i = 0;i < count;i++){ + sum += arr + i; + } + if(sum == target)return true; + std::size_t window = sum; + for(std::size_t i = count;i < size;i++){ + window += (arr + i) - (arr + (i - count)); + } + return false; + + } + auto sub_max(std::size_t count,std::size_t target) -> std::iter_value_t + { + using value_type = std::iter_value_t; + using type = std::common_type_t; + if(size == 0){ + return 0; + } + type sum = 0; + for(std::size_t i = 0;i < count;i++){ + sum += arr + i; + } + type window = sum; + type max = 0; + for(std::size_t i = count;i < size;i++){ + window += (arr + i) - (arr + (i - count)); + max = std::max(max,window); + } + return max; + } + //std::vector max_subarray(std::size_t count,std::size_t target){ + //if(size == 0)return {}; + //std::vectorres; + //return res; + //} public: /** * @brief merge adalah built in function untuk menggabungkan sebuah container dengan object vector diposisi end(arr + size) @@ -1157,4 +1203,4 @@ std::ostream& operator<<(std::ostream& os,const Vector& others){ return os; } } -#endif \ No newline at end of file +#endif