File tree Expand file tree Collapse file tree 3 files changed +39
-16
lines changed Expand file tree Collapse file tree 3 files changed +39
-16
lines changed Original file line number Diff line number Diff line change @@ -9,20 +9,15 @@ static inline int max(int a, int b)
9
9
10
10
static int rob (int * nums , int numsSize )
11
11
{
12
- if (numsSize == 0 ) {
13
- return 0 ;
14
- }
15
-
16
12
int i ;
17
- int taken = nums [ 0 ] ;
13
+ int taken = 0 ;
18
14
int untaken = 0 ;
19
15
/* Record max profits of nums[0...i] respectively */
20
- for (i = 1 ; i < numsSize ; i ++ ) {
16
+ for (i = 0 ; i < numsSize ; i ++ ) {
21
17
int tmp_taken = taken ;
22
- int tmp_untaken = untaken ;
23
18
/* Taken or untaken nums[i] */
24
19
taken = untaken + nums [i ];
25
- untaken = max (tmp_taken , tmp_untaken );
20
+ untaken = max (tmp_taken , untaken );
26
21
}
27
22
28
23
return max (taken , untaken );
Original file line number Diff line number Diff line change @@ -10,25 +10,22 @@ static inline int max(int a, int b)
10
10
static int _rob (int * nums , int numsSize )
11
11
{
12
12
int i ;
13
- int taken = nums [ 0 ] ;
13
+ int taken = 0 ;
14
14
int untaken = 0 ;
15
15
/* Record max profits of nums[0...i] respectively */
16
- for (i = 1 ; i < numsSize ; i ++ ) {
16
+ for (i = 0 ; i < numsSize ; i ++ ) {
17
17
int tmp_taken = taken ;
18
- int tmp_untaken = untaken ;
19
18
/* 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 );
22
21
}
23
22
24
23
return max (taken , untaken );
25
24
}
26
25
27
26
static int rob (int * nums , int numsSize )
28
27
{
29
- if (numsSize == 0 ) {
30
- return 0 ;
31
- } else if (numsSize == 1 ) {
28
+ if (numsSize == 1 ) {
32
29
return nums [0 ];
33
30
} else {
34
31
/* The first and the last element are adjacent */
Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments