首页 > 解决方案 > 我的 Equal Stacks 问题逻辑中的问题在哪里?

问题描述

有关问题的详细信息,请查看 - 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

标签: c++11stack

解决方案


问题是您只需在每次迭代中删除每个堆栈的堆栈顶部。

例如:您有三个堆栈,所有堆栈都有一个 5 单位高的物体的底部。现在只有其中一个在底座顶部也有一个 1 单位高的物体;这将为您提供 5 (1x5)、5 (1x5) 和 6 (1x5 + 1x1) 的高度。

在您的算法中,您首先比较总和。“如果(5 == 5 == 6)=> 错误”。

然后你把每个堆栈顶部的对象拿走。-> 第一个堆栈:0 个单位,第二个堆栈:0 个单位,第三个堆栈 1 个单位。

你看到问题了吗?

Igor 提到了它,但您首先必须搜索最大的堆栈并“按自己的方式向下工作”。


推荐阅读