303
This commit is contained in:
21
include/solution/303.h
Normal file
21
include/solution/303.h
Normal 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
44
src/303.c
Normal 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
38
tests/test_303.cpp
Normal 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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user