HackerRank mini-max-sum问题代码过样例但提交报错求解
问题原因
两份代码的共同问题是整数溢出。
根据题目规则,数组单个元素取值范围为1 ≤ arr[i] ≤ 10^9,5个元素的总和最大可达5 * 10^9,而C++中32位有符号整数int的最大值仅为2^31 - 1 ≈ 2.1 * 10^9,总和超过存储上限后会发生截断,最终输出错误的结果。数值较小的样例不会触发溢出所以可以正常通过,一旦测试用例的元素数值较大就会报错。
修正方案
将存储求和结果的变量类型从int替换为64位整数类型long long即可,修正后的代码示例如下:
第一种写法修正版:
void miniMaxSum(vector<int> arr) { sort(arr.begin(), arr.end()); long long sum=0; for(int i=0; i<5; i++) sum += arr[i]; cout << sum - arr[4] << " " << sum - arr[0] << endl; }
第二种写法修正版:
void miniMaxSum(vector<int> arr) { sort(arr.begin(), arr.end()); long long min=0; for(int i=0; i<4; i++) min += arr[i]; cout << min << " "; long long max=0; for(int i=1; i<5; i++) max += arr[i]; cout << max << endl; }
内容的提问来源于stack exchange,提问作者hululu
相关产品推荐
相关产品推荐

