Line 15: Char 5: error: non-void function does not return a value in all control paths [-Werror,-Wreturn-type]
报错代码:
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
vector<int>dp(nums.size(),1);//初始化为1
if(nums.size()==1) return 1;
int res=1;
for(int i=1;i<nums.size();i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j])
dp[i]=max(dp[i],dp[j]+1);
}
res=max(res,dp[i]);//res记录dp[i]的最大值
return res;
}
}
};
这个错误提示的是非void函数lengthOfLIS在某些控制路径下没有返回任何值,这在C++中是不允许的。每个非void函数都必须在所有可能的执行路径下都有返回值。
这个错误出现在lengthOfLIS函数中。在for循环内部使用了return语句,导致只有在for循环第一次迭代时才会返回值,如果for循环没有执行,那么函数就不会有返回值。
return res位置移动到外面就好了
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
vector<int>dp(nums.size(),1);//初始化为1
if(nums.size()==1) return 1;
int res=1;
for(int i=1;i<nums.size();i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j])
dp[i]=max(dp[i],dp[j]+1);
}
res=max(res,dp[i]);//res记录dp[i]的最大值
}
return res;
}
};