From 33f3b72bfa22ec9bb366b651e607c458777bf6d2 Mon Sep 17 00:00:00 2001 From: Jeffrey Hsu Date: Mon, 14 Jul 2025 20:57:04 +0800 Subject: [PATCH] 303 --- include/solution/303.h | 21 ++++++++++++++++++++ src/303.c | 44 ++++++++++++++++++++++++++++++++++++++++++ tests/test_303.cpp | 38 ++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 include/solution/303.h create mode 100644 src/303.c create mode 100644 tests/test_303.cpp diff --git a/include/solution/303.h b/include/solution/303.h new file mode 100644 index 0000000..bfa2254 --- /dev/null +++ b/include/solution/303.h @@ -0,0 +1,21 @@ +#ifndef INC_303_H +#define INC_303_H +#ifdef __cplusplus +extern "C" +{ +#endif + typedef struct + { + int *data; + int size; + } NumArray; + + NumArray *numArrayCreate(int *nums, int numsSize); + + int numArraySumRange(NumArray *obj, int left, int right); + + void numArrayFree(NumArray *obj); +#ifdef __cplusplus +} +#endif +#endif \ No newline at end of file diff --git a/src/303.c b/src/303.c new file mode 100644 index 0000000..806f490 --- /dev/null +++ b/src/303.c @@ -0,0 +1,44 @@ +#define PREFIX + +#include +#include + +#ifdef PREFIX +#else +#include +#endif + +NumArray *numArrayCreate(int *nums, int numsSize) +{ + NumArray *ret = malloc(sizeof(NumArray)); + ret->size = numsSize; +#ifdef PREFIX + ret->data = malloc(sizeof(int) * (numsSize + 1)); + ret->data[0] = 0; + for (int i = 0; i < numsSize; i++) + ret->data[i + 1] = ret->data[i] + nums[i]; +#else + ret->data = malloc(sizeof(int) * numsSize); + memcpy(ret->data, nums, sizeof(int) * numsSize); +#endif + return ret; +} + +int numArraySumRange(NumArray *obj, int left, int right) +{ +#ifdef PREFIX + return obj->data[right + 1] - obj->data[left]; +#else + int sum = 0; + for (int i = left; i <= right; i++) + sum += obj->data[i]; + + return sum; +#endif +} + +void numArrayFree(NumArray *obj) +{ + free(obj->data); + free(obj); +} \ No newline at end of file diff --git a/tests/test_303.cpp b/tests/test_303.cpp new file mode 100644 index 0000000..6e6e793 --- /dev/null +++ b/tests/test_303.cpp @@ -0,0 +1,38 @@ +#include +#include + +class NumArrayTest : public ::testing::Test +{ + protected: + NumArray *numArray = nullptr; + + void SetUp() override + { + int init[] = {-2, 0, 3, -5, 2, -1}; + numArray = numArrayCreate(init, sizeof(init) / sizeof(int)); + ASSERT_NE(numArray, nullptr); // 确保初始化成功 + } + + void TearDown() override + { + numArrayFree(numArray); + } +}; + +// 示例测试:sumRange(0, 2) == 1 +TEST_F(NumArrayTest, SumRange_0_2) +{ + EXPECT_EQ(numArraySumRange(numArray, 0, 2), 1); +} + +// 示例测试:sumRange(2, 5) == -1 +TEST_F(NumArrayTest, SumRange_2_5) +{ + EXPECT_EQ(numArraySumRange(numArray, 2, 5), -1); +} + +// 示例测试:sumRange(0, 5) == -3 +TEST_F(NumArrayTest, SumRange_0_5) +{ + EXPECT_EQ(numArraySumRange(numArray, 0, 5), -3); +} \ No newline at end of file