【发布时间】:2019-11-03 08:36:44
【问题描述】:
我目前正在 Hackerrank 上解决这个问题: https://www.hackerrank.com/challenges/mini-max-sum/problem
在 15 个测试用例中,我只通过了 5 个。问题在于最大和的输出。
在代码中,首先我要找到向量中的最大和最小元素,用 max 和 min 表示。 minI 和 maxI 是最小值和最大值的索引。
在计算最大和时,我将 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
【问题讨论】:
-
如果不知道具体的测试用例,这是不可能在这里回答的。一般建议:不要在 hackerrank 等在线代码判断引擎上浪费时间。
-
您可以将我的代码粘贴到上面给出的链接上,提交代码后,您将能够看到测试用例。
-
你知道 C++ 中整数的有效值范围是多少吗?这可能会给你一个线索。
-
我还应该在哪里练习和提高解决问题的能力?
-
我还应该在哪里练习和提高解决问题的能力?我认为这取决于你作为程序员想要做什么。如果您的主要目标是获得一份程序员的工作,我会说要避开这些网站。他们会教你很多不适合作为软件开发人员工作的不良做法。而是帮助你在 github 上感兴趣的开源项目。另外,至少对我来说,你在这些网站上解决的问题并不能代表我作为一名专业开发人员 22 年来所做的事情,因为我已经获得了代码报酬。..