From dc222231e6d0102d4fec2cb2e540209dc652c2b0 Mon Sep 17 00:00:00 2001 From: Jeffrey Hsu Date: Fri, 5 Dec 2025 22:41:20 +0800 Subject: [PATCH] 3397 --- include/solution/3397.h | 14 ++++++++++++++ src/3397.c | 41 +++++++++++++++++++++++++++++++++++++++++ tests/test_3397.cpp | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 include/solution/3397.h create mode 100644 src/3397.c create mode 100644 tests/test_3397.cpp diff --git a/include/solution/3397.h b/include/solution/3397.h new file mode 100644 index 0000000..b87508e --- /dev/null +++ b/include/solution/3397.h @@ -0,0 +1,14 @@ +// This file is generated by mkfile.py +// Date: 2025-10-18 + +#ifndef INC_3397_H +#define INC_3397_H +#ifdef __cplusplus +extern "C" +{ +#endif + int maxDistinctElements(int* nums, int numsSize, int k); +#ifdef __cplusplus +} +#endif +#endif // INC_3397_H diff --git a/src/3397.c b/src/3397.c new file mode 100644 index 0000000..83b15b8 --- /dev/null +++ b/src/3397.c @@ -0,0 +1,41 @@ +// This file is generated by mkfile.py +// Date: 2025-10-18 + +#include +#include +int cmp(const void *a, const void *b) +{ + return *(int *)a - *(int *)b; +} + +int maxDistinctElements(int *nums, int numsSize, int k) +{ + if (numsSize == 0) + return 0; + + qsort(nums, numsSize, sizeof(int), cmp); + int result = 1; + int prev = nums[0] - k; + + for (int i = 1; i < numsSize; i++) + { + int min = nums[i] - k; + int max = nums[i] + k; + + if (prev >= min) + { + if (max <= prev) + { + continue; + } + prev += 1; + } + else + { + prev = min; + } + result++; + } + + return result; +} diff --git a/tests/test_3397.cpp b/tests/test_3397.cpp new file mode 100644 index 0000000..5e6b1e9 --- /dev/null +++ b/tests/test_3397.cpp @@ -0,0 +1,32 @@ +// This file is generated by mkfile.py +// Date: 2025-10-18 + +#include +#include + +class MaxDistinctElementsTest : public ::testing::Test { +protected: + void AssertMaxDistinctElements(std::vector nums, int k, int expected) { + int* arr = new int[nums.size()]; + std::copy(nums.begin(), nums.end(), arr); + + int result = maxDistinctElements(arr, nums.size(), k); + ASSERT_EQ(result, expected); + + delete[] arr; + } +}; + +// 示例 1 +TEST_F(MaxDistinctElementsTest, Example1) { + // 输入:nums = [1,2,2,3,3,4], k = 2 + // 输出:6 + AssertMaxDistinctElements({1, 2, 2, 3, 3, 4}, 2, 6); +} + +// 示例 2 +TEST_F(MaxDistinctElementsTest, Example2) { + // 输入:nums = [4,4,4,4], k = 1 + // 输出:3 + AssertMaxDistinctElements({4, 4, 4, 4}, 1, 3); +} \ No newline at end of file