非相邻元素的最大和运行时错误添加无符号偏移量



我用动态编程解决了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];

相关内容

  • 没有找到相关文章

最新更新