Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 10d65a1

Browse files
AC 985
1 parent bd45673 commit 10d65a1

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright (C) 2022, Saul Lawliet <october dot sunbathe at gmail dot com>
3+
* All rights reserved.
4+
*
5+
* 中等难度的题? 其实很简单
6+
* 维护一个sum变量, 再循环计算一次即可
7+
*/
8+
9+
#include <stdbool.h>
10+
#include "c/data-structures/array.h"
11+
#include "c/test.h"
12+
13+
/**
14+
* Note: The returned array must be malloced, assume caller calls free().
15+
*/
16+
int *sumEvenAfterQueries(int *nums, int numsSize, int **queries, int queriesSize, int *queriesColSize, int *returnSize) {
17+
*returnSize = 0;
18+
int *returnArray = malloc(sizeof(int) * queriesSize);
19+
20+
int sum = 0;
21+
for (int i = 0; i < numsSize; i++) {
22+
if (nums[i] % 2 == 0)
23+
sum += nums[i];
24+
}
25+
26+
int v1, v2;
27+
bool even1, even2;
28+
for (int i = 0; i < queriesSize; i++) {
29+
v1 = nums[queries[i][1]];
30+
v2 = queries[i][0];
31+
even1 = v1 % 2 == 0;
32+
even2 = v2 % 2 == 0;
33+
34+
if (even1) {
35+
if (even2) {
36+
sum += v2; // 偶, 偶: sum + 第二个数
37+
} else {
38+
sum -= v1; // 偶, 奇: sum - 第一个数
39+
}
40+
} else {
41+
if (!even2) {
42+
sum += v1 + v2; // 奇, 奇: sum + 第一个数 + 第二个数
43+
}
44+
}
45+
46+
nums[queries[i][1]] += v2;
47+
returnArray[(*returnSize)++] = sum;
48+
}
49+
50+
return returnArray;
51+
}
52+
53+
void test(const char *expect, const char *nums, const char *queries) {
54+
arrayEntry *e1 = arrayParse1D(nums, ARRAY_INT);
55+
arrayEntry *e2 = arrayParse2D(queries, ARRAY_INT);
56+
57+
int returnSize;
58+
int *returnArray = sumEvenAfterQueries(arrayValue(e1), arraySize(e1), arrayValue(e2),
59+
arrayRow(e2), arrayCols(e2), &returnSize);
60+
61+
EXPECT_EQ_STRING_AND_FREE_ACTUAL(expect, arrayToString1D(returnArray, returnSize, ARRAY_INT));
62+
63+
arrayFree(e2);
64+
arrayFree(e1);
65+
}
66+
67+
int main(void) {
68+
test("[8,6,2,4]", "[1,2,3,4]", "[[1,0],[-3,1],[-4,0],[2,3]]");
69+
70+
return testOutput();
71+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /