diff --git a/src/problems/2016-maximum-difference-between-increasing-elements.cpp b/src/problems/2016-maximum-difference-between-increasing-elements.cpp new file mode 100644 index 0000000..bc8757a --- /dev/null +++ b/src/problems/2016-maximum-difference-between-increasing-elements.cpp @@ -0,0 +1,49 @@ +/** +* [2016] Maximum Difference Between Increasing Elements + */ +#include +#include +using namespace std; + + +// submission codes start here + +class Solution +{ +public: + int maximumDifference(vector &nums) + { + vector heap; + heap.reserve(nums.size()); + + ranges::make_heap(heap, greater()); + + int result = -1; + for (int i = 1; i < nums.size(); ++i) + { + heap.push_back(nums[i - 1]); + ranges::push_heap(heap, greater()); + + if (heap[0] < nums[i]) + { + result = max(result, nums[i] - heap[0]); + } + } + + return result; + } +}; + +// submission codes end + +TEST(P2016, Test1) +{ + vector nums1 = {7, 1, 5, 4}; + ASSERT_EQ(4, Solution().maximumDifference(nums1)); + + vector nums2 = {9, 4, 3, 2}; + ASSERT_EQ(-1, Solution().maximumDifference(nums2)); + + vector nums3 = {1, 5, 2, 10}; + ASSERT_EQ(9, Solution().maximumDifference(nums3)); +} \ No newline at end of file