This commit is contained in:
2025-07-14 20:57:04 +08:00
parent 3fcbb0e5ad
commit 33f3b72bfa
3 changed files with 103 additions and 0 deletions

21
include/solution/303.h Normal file
View File

@@ -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

44
src/303.c Normal file
View File

@@ -0,0 +1,44 @@
#define PREFIX
#include <solution/303.h>
#include <stdlib.h>
#ifdef PREFIX
#else
#include <string.h>
#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);
}

38
tests/test_303.cpp Normal file
View File

@@ -0,0 +1,38 @@
#include <gtest/gtest.h>
#include <solution/303.h>
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);
}