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

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