LeetCode 198, House Robber, 这个分治递归写的还是有点问题,可以修正到直接递归rob函数,正常情况下,maxRob的第一个和第二个参数相加就是rob的第一个参数。
int maxRob(int num[], int start, int n){
if( n > 3){
int splitIndex = n/2 ;
int maxContainSplit = maxRob(num,start, splitIndex -1) + maxRob(num, start + splitIndex + 2, n - splitIndex - 2) + num[start + splitIndex];
int maxWithoutSplit = maxRob(num,start, splitIndex ) + maxRob(num, start + splitIndex + 1 , n - splitIndex - 1 );
return maxContainSplit>maxWithoutSplit?maxContainSplit:maxWithoutSplit;
}
else{
if( n == 1){
return num[start];
}
else if(n == 2){
return (num[start] > num[start + 1])?num[start]:num[start + 1];
}
else if(n == 3){
return (num[start + 1] > (num[start] + num[start + 2]))? (num[start + 1]):(num[start] + num[start + 2]);
}
else{
return 0;
}
}
}
int rob(int num[], int n) {
return maxRob(num,0,n);
}