【发布时间】:2019-02-03 20:39:44
【问题描述】:
有关问题的详细信息,请查看 - https://www.hackerrank.com/challenges/equal-stacks/problem
我们有三组圆柱体,每个圆柱体的直径相同,但高度可能不同。您可以通过多次移除和丢弃最顶部的圆柱体来更改堆叠的高度。
我们需要找到堆栈的最大可能高度,以使所有堆栈的高度完全相同。这意味着我们必须从三个堆栈中的零个或多个顶部移除零个或多个圆柱体,直到它们都具有相同的高度,然后打印高度。必须以最大化高度的方式进行移除。
我使用三个向量实现了堆栈,并找出了三个堆栈中每一个中圆柱体的高度总和。现在,我在每个堆栈上重复实现 pop() 函数,直到堆栈中的一个变空或每个堆栈中的圆柱体高度之和相等。
//我的返回最大高度的函数:
int equalStacks(vector<int> h1, vector<int> h2, vector<int> h3)
{
int s1 = h1.size(), s2 = h2.size(), s3 = h3.size(), sum1 = 0,
sum2 = 0, sum3 = 0;
int i, j;
for(i = 0; i < s1; i++)
sum1 += h1[i];
for(i = 0; i < s2; i++)
sum2 += h2[i];
for(i = 0; i < s3; i++)
sum3 += h3[i];
int height = 0;
while(!h1.empty() && !h2.empty() && !h3.empty())
{
if(sum1 == sum2 && sum2 == sum3)
{
height = sum1;
return height;
}
sum1 -= h1.back();
sum2 -= h2.back();
sum3 -= h2.back();
h1.pop_back();
h2.pop_back();
h3.pop_back();
}
return height;
}
示例输入:
5 3 4
3 2 1 1 1
4 3 2
1 1 4 1
预期输出:
5
我的程序的输出:
0
【问题讨论】:
-
在每个步骤中,您要同时移除三个气缸,每个堆栈一个。相反,您应该每次从最高的堆栈(或至少从不是最短的堆栈)中逐一删除它们。