我用动态编程解决了leetcode的入室抢劫问题,leetcode给了我第1034行:字符34:运行时错误:将无符号偏移量添加到0x6020000000b0溢出到0x602000000ac(stl_vector.h(摘要:UndefinedBehaviorManitizer:未定义的行为/usr/bin//lib/gcc/x86_64-linux-gnu/9/../..//include/c++/9/bitsl/stl_vector.h:1043:34
我哪里错了?
class Solution {
public:
int solveUtil(int ind, vector<int>& arr, vector<int>& dp){
if(dp[ind]!=-1) return dp[ind];
if(ind==0) return arr[ind];
if(ind<0) return 0;
int pick= arr[ind]+ solveUtil(ind-2, arr,dp);
int nonPick = 0 + solveUtil(ind-1, arr, dp);
return dp[ind]=max(pick, nonPick);
}
int rob(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n,-1);
return solveUtil(n-1,nums, dp);
}
};
这看起来很可疑:
if(dp[ind]!=-1) return dp[ind];
当调用solveUtil(ind-1(或solveUtel(ind-2(时,可以很容易地传递小于零的值ind
。
应为:
if ((ind >= 0) && (dp[ind] != -1))
{
return dp[ind];
}
或者只是重新订购您的线路:
if(ind==0) return arr[ind];
if(ind<0) return 0;
if(dp[ind]!=-1) return dp[ind];