Skip to content

Commit 1296520

Browse files
Add C++ implementation
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent e7dd241 commit 1296520

File tree

3 files changed

+39
-16
lines changed

3 files changed

+39
-16
lines changed

198_house_robber/robber.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,15 @@ static inline int max(int a, int b)
99

1010
static int rob(int* nums, int numsSize)
1111
{
12-
if (numsSize == 0) {
13-
return 0;
14-
}
15-
1612
int i;
17-
int taken = nums[0];
13+
int taken = 0;
1814
int untaken = 0;
1915
/* Record max profits of nums[0...i] respectively */
20-
for (i = 1; i < numsSize; i++) {
16+
for (i = 0; i < numsSize; i++) {
2117
int tmp_taken = taken;
22-
int tmp_untaken = untaken;
2318
/* Taken or untaken nums[i] */
2419
taken = untaken + nums[i];
25-
untaken = max(tmp_taken, tmp_untaken);
20+
untaken = max(tmp_taken, untaken);
2621
}
2722

2823
return max(taken, untaken);

213_house_robber_ii/robber.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,22 @@ static inline int max(int a, int b)
1010
static int _rob(int* nums, int numsSize)
1111
{
1212
int i;
13-
int taken = nums[0];
13+
int taken = 0;
1414
int untaken = 0;
1515
/* Record max profits of nums[0...i] respectively */
16-
for (i = 1; i < numsSize; i++) {
16+
for (i = 0; i < numsSize; i++) {
1717
int tmp_taken = taken;
18-
int tmp_untaken = untaken;
1918
/* Taken or untaken nums[i] */
20-
taken = tmp_untaken + nums[i];
21-
untaken = max(tmp_taken, tmp_untaken);
19+
taken = untaken + nums[i];
20+
untaken = max(tmp_taken, untaken);
2221
}
2322

2423
return max(taken, untaken);
2524
}
2625

2726
static int rob(int* nums, int numsSize)
2827
{
29-
if (numsSize == 0) {
30-
return 0;
31-
} else if (numsSize == 1) {
28+
if (numsSize == 1) {
3229
return nums[0];
3330
} else {
3431
/* The first and the last element are adjacent */

337_house_robber_iii/robber.cc

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
/**
6+
* Definition for a binary tree node.
7+
* struct TreeNode {
8+
* int val;
9+
* TreeNode *left;
10+
* TreeNode *right;
11+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
12+
* };
13+
*/
14+
class Solution {
15+
public:
16+
int rob(TreeNode* root) {
17+
auto res = dfs(root);
18+
return max(res.first, res.second);
19+
}
20+
21+
pair<int, int> dfs(TreeNode *root) {
22+
if (root == nullptr) {
23+
return make_pair(0, 0);
24+
}
25+
auto subl = dfs(root->left);
26+
auto subr = dfs(root->right);
27+
int taken = root->val + subl.second + subr.second;
28+
int untaken = max(subl.first, subl.second) + max(subr.first, subr.second);
29+
return make_pair(taken, untaken);
30+
}
31+
};

0 commit comments

Comments
 (0)