【发布时间】:2021-06-13 11:23:54
【问题描述】:
我试图解决这个问题:Third Maximum Number
但我遇到了这个错误
第 4 行:字符 37:运行时错误:有符号整数溢出:-9223372036854775808 - 10 不能用“long long”类型表示(solution.cpp) 摘要:UndefinedBehaviorSanitizer:undefined-behavior prog_joined.cpp:13:37
这是我的代码
class Solution {
public:
int thirdMax(vector<int>& nums) {
long long int mx = LLONG_MIN-10;
long long int second_mx = LLONG_MIN-10;
long long int third_mx = LLONG_MIN-10;
for(int i=0; i<nums.size(); i++){
if(nums[i] > mx){
mx = nums[i];
}
}
for(int i=0; i<nums.size(); i++){
if(nums[i] != mx){
if(nums[i] > second_mx){
second_mx = nums[i];
}
}
}
for(int i=0; i<nums.size(); i++){
if(nums[i] != mx && nums[i] != second_mx){
if(nums[i] > third_mx){
third_mx = nums[i];
}
}
}
if(third_mx == LLONG_MIN){
return mx;
}
return third_mx;
}
};
谁能告诉我这个错误的真正含义是什么?
【问题讨论】:
-
您使用什么编译器标志?您应该收到一些关于
return mx的可怕编译器警告,因为您的方法的返回类型是int,但mx是long long int(int通常是int32_t,而long long int通常是int64_t)。如果您收到这些警告,为什么不在继续之前修复它们? -
正如它所说的那样。
LLONG_MIN-10的结果不能存储在long long(又名long long int)中。想想看。LLONG_MIN是可以存储在long long中的最小值(负值最远离零,因为long long是signed类型)。LLONG_MIN-10小于该最小值,因此不能存储在long long中。
标签: c++