黑客排名最小最大值问题,最大总和给出错误的负值
Hacker rank minimax problem, maximum sum giving wrong negative values
我目前正在Hackerrank上解决这个问题: https://www.hackerrank.com/challenges/mini-max-sum/problem
在 15 个测试用例中,我只通过了 5 个。问题出在最大总和的输出上。
在代码中,首先我找到向量中的最大值和最小值,用最大值和最小值表示。
在计算最大总和时,我输入 arr[minI] = 0(因此向量被简化为将给出最大总和的元素)。获得最大和后,我输入 arr[minI] = min,从而恢复原始向量。然后我重复这个过程,把 arr[maxI] = 0;通过这种方式,可以同时获得n-1元素的最小和最大和。我知道这很难理解,但任何人都可以帮我找出这里的问题。
我尝试使用 arr.erase() 和 arr.insert(),但这让我遇到了索引问题。
void miniMaxSum(vector<int> arr) {
int max = arr[0];
int min = arr[0];
int minI = 0;
int maxI = 0;
for (int i = 0; i < arr.size(); i++) {
if(arr[i] > max){
max = arr[i];
maxI = i;
}
if(arr[i] < min){
min = arr[i];
minI = i;
}
}
arr[minI] = 0;
int maxsum = 0;
for(int i = 0; i<arr.size(); i++){
maxsum += arr[i];
}
arr[minI] = min;
arr[maxI] = 0;
int minsum = 0;
for(int i = 0; i<arr.size(); i++){
minsum += arr[i];
}
cout << minsum << " " << maxsum;
}
例如,一个测试用例的输入是:
140537896 243908675 670291834 923018467 520718469
上述输入的正确答案是: 1575456874 2357937445
我对上述输入的回答是: 1575456874 -1937029851
显然,在这个平台上,int
的长度为 32 位,这意味着它的范围在-2147483647
到2137483647
之间 .溢出最大值是"未定义的行为"。
似乎对于您提出的测试用例,将int
更改为long long
就足够了,但是该问题可能需要更大的数字,并且您需要弄清楚如何对更大的数字执行计算。
添加正整数后的负和几乎总是能指出问题所在:你得到了溢出。
此问题有一个约束:
1 <= arr[i] <= 10^9
将四个接近 10^9 的数字相加时,会溢出 32 位整数。因此,您需要切换到更大的数据类型 -uint64_t
将是一个很好的候选者。
注意:该问题要求五个元素中的四个元素的最小和最大和,这意味着只需要排除一个元素。因此,如果从五个元素的总和中减去最小的元素,则总和将是最大值;当您减去最大的元素时,总和将是最小的。
- 分段错误当我试图运行程序时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 编译类 C++ 中的线程时出错(错误 xthread)
- 加载GLEW库时出错(错误LNK2001)
- 通过函数指针调用函数时出错(错误C2064)
- 编译core.obj时出错:错误LNK2001:未解析的外部符号_harmony_core_init
- 链接c++静态库与android ndk时出错(错误:无法识别文件格式)
- 使用GCC编译游戏时出错.(错误:将"Screen"的含义从"class Screen&q