From 53ad6bab788f8173f59f9479dbbe7ed70f3dea9d Mon Sep 17 00:00:00 2001 From: Eatswap Date: Mon, 24 Oct 2022 09:11:13 +0800 Subject: [PATCH] add: 221024-CN --- cpp/2210/221024-CN.cpp | 57 +++++++++++++++++++++++++++++++++++++++++ cpp/2210/CMakeLists.txt | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 cpp/2210/221024-CN.cpp diff --git a/cpp/2210/221024-CN.cpp b/cpp/2210/221024-CN.cpp new file mode 100644 index 0000000..1ab452d --- /dev/null +++ b/cpp/2210/221024-CN.cpp @@ -0,0 +1,57 @@ +#include +#include + +class Solution { +private: + static int partitionDisjoint_1(const std::vector& nums) { + const int n = nums.size(); + std::vector max_until(n), min_since(n); + max_until[0] = nums[0]; + min_since[n - 1] = nums[n - 1]; + for (int i = 1; i < n; ++i) + max_until[i] = std::max(max_until[i - 1], nums[i]); + for (int i = n - 1; i--; ) + min_since[i] = std::min(min_since[i + 1], nums[i]); + for (int i = 1; i < n; ++i) + if (max_until[i - 1] <= min_since[i]) + return i; + return -1; + } + + static int partitionDisjoint_2(const std::vector& nums) { + const int n = nums.size(); + std::vector min_since(n); + min_since[n - 1] = nums[n - 1]; + for (int i = n - 1; i--; ) + min_since[i] = std::min(min_since[i + 1], nums[i]); + int max_until = nums[0]; + for (int i = 1; i < n; ++i) { + if (max_until <= min_since[i]) + return i; + max_until = std::max(max_until, nums[i]); + } + return -1; + } + +public: + static int partitionDisjoint(const std::vector& nums) { + const int n = nums.size(); + std::vector min_since(n); + min_since[n - 1] = nums[n - 1]; + for (int i = n - 1; i--; ) + min_since[i] = std::min(min_since[i + 1], nums[i]); + int max_until = 0; + for (int i = 1; i < n; ++i) + if ((max_until = std::max(max_until, nums[i - 1])) <= min_since[i]) + return i; + return -1; + } +}; + +int main() { + std::cout << Solution::partitionDisjoint({1,1,1,0,6,12}); + + // todo: METRIC + + return 0; +} diff --git a/cpp/2210/CMakeLists.txt b/cpp/2210/CMakeLists.txt index 0de6270..4a586ca 100644 --- a/cpp/2210/CMakeLists.txt +++ b/cpp/2210/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2210) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2210 221023.cpp) +ADD_EXECUTABLE(2210 221024-CN.cpp)