From 74f36ba49842ac92cb6f5da6d3c75b9bcae7604b Mon Sep 17 00:00:00 2001 From: Lam Haoyin Date: Fri, 14 Jan 2022 23:28:19 +0800 Subject: [PATCH] add: 220114 --- 2201/220114-CN.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++ 2201/220114.cpp | 32 +++++++++++++++++++++++++++++ 2201/CMakeLists.txt | 2 +- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 2201/220114-CN.cpp create mode 100644 2201/220114.cpp diff --git a/2201/220114-CN.cpp b/2201/220114-CN.cpp new file mode 100644 index 0000000..3450049 --- /dev/null +++ b/2201/220114-CN.cpp @@ -0,0 +1,50 @@ +#include +#include +#include + +class Solution { +private: + static auto getCartesianProduct(const std::vector& p, const std::vector& q, int limP, int limQ) { + std::vector> ret; + for (int i = 0; i < limP; ++i) { + for (int j = 0; j < limQ; ++j) { + ret.push_back({p[i], q[j]}); + } + } + return ret; + } +public: + static auto kSmallestPairs(const std::vector& nums1, const std::vector& nums2, int k) { + auto n1 = nums1.size(), n2 = nums2.size(); + if (k >= n1 * n2) + return getCartesianProduct(nums1, nums2, n1, n2); + std::vector> ret; + + auto cmp = [&] (const std::vector& i, const std::vector& j) { + return nums1[i[0]] + nums2[i[1]] > nums1[j[0]] + nums2[j[1]]; + }; + + std::priority_queue, std::vector>, decltype(cmp)> q(cmp); + for (int i = 0; i < n1; ++i) { + q.push({i, 0}); + } + + for (int i = 0; i < k; ++i) { + auto t = q.top(); + q.pop(); + ret.push_back({nums1[t[0]], nums2[t[1]]}); + if (1 + t[1] < n2) + q.push({t[0], 1 + t[1]}); + } + + return ret; + } +}; + +int main() { + auto ret = Solution::kSmallestPairs({-10, -4, 0, 0, 6}, {3, 5, 6, 7, 8, 100}, 10); + for (const auto& i: ret) { + std::printf("[%d, %d]\n", i[0], i[1]); + } + return 0; +} diff --git a/2201/220114.cpp b/2201/220114.cpp new file mode 100644 index 0000000..7ad1438 --- /dev/null +++ b/2201/220114.cpp @@ -0,0 +1,32 @@ +#include +#include +#include + +class Solution { +public: + static int myAtoi(const std::string& s) { + long long ret = 0; + int sgn = 1, pos = 0; + for (; std::isspace(s[pos]); ++pos); + if (s[pos] == '-') + sgn = -sgn; + if (s[pos] == '-' || s[pos] == '+') + ++pos; + for (; std::isdigit(s[pos]); ++pos) { + ret = (ret << 3) + (ret << 1) + (s[pos] ^ 48); + if (ret > INT32_MAX) + break; + } + ret *= sgn; + if (ret < INT32_MIN) + return INT32_MIN; + else if (ret > INT32_MAX) + return INT32_MAX; + return int(ret & 0xFFFFFFFFLL); + } +}; + +int main() { + std::cout << Solution::myAtoi("42"); + return 0; +} \ No newline at end of file diff --git a/2201/CMakeLists.txt b/2201/CMakeLists.txt index 28cea6a..27aa1d8 100644 --- a/2201/CMakeLists.txt +++ b/2201/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2201) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2201 220113.cpp) \ No newline at end of file +ADD_EXECUTABLE(2201 220114-CN.cpp) \ No newline at end of file