【问题标题】:Equal stacks:code not working for large input相等的堆栈:代码不适用于大输入
【发布时间】:2017-03-14 08:48:39
【问题描述】:

我已经尝试了很长时间,但是以下问题的代码给了我错误的答案。
问题陈述:您有三组气缸,每个气缸都有相同的直径,但它们的高度可能不同。您可以通过多次移除和丢弃最顶部的圆柱体来更改堆叠的高度。

找到堆栈的最大可能高度,以使所有堆栈的高度完全相同。这意味着您必须从三个堆栈中的零个或多个顶部移除零个或多个圆柱体,直到它们的高度相同,然后打印高度。必须以最大化高度的方式进行移除。
说明:
看到这张图片:Explanation

示例输入

5 3 4
3 2 1 1 1
4 3 2
1 1 4 1
样本输出

5
我的算法是:
第一步。获取 3 个数组并将它们反转,从现有数组中创建一个新数组,其中每个元素是所有先前元素的总和。例如:[3,2,1,1,1] -> [1,1,1,2,3] -> [1,2,3,5,8] 所以形成的 3 个新数组将是 [1,2,3,5,8] [2,5,9] [1,5,6,7]
Step II。取最小数组遍历最小数组并在其他 2 个数组中搜索元素 - 如果该元素存在于其他 2 个数组中,则停止并返回数字。
例如。在这里,我从 element - 2 开始:在其他 2 数组中不存在。接下来我从元素 - 5 开始:它存在于其他 2 个数组中。

我的代码:

#include<iostream>
using namespace std;

int main()
{
    long long h1,h2,h3;
    cin>>h1>>h2>>h3;
    long long a[h1],b[h2],c[h3];
    long long sum1=0,sum2=0,sum3=0;
    for(long long i=0;i<h1;i++){
        cin>>a[h1-i-1];
    }
    for(long long i=0;i<h2;i++){
            cin>>b[h2-i-1];
        }
    for(long long i=0;i<h3;i++){
            cin>>c[h3-i-1];
        }
    for(long long i=0;i<h1;i++){
            sum1=sum1+a[i];
            a[i]=sum1;
        }
    for(long long i=0;i<h2;i++){
                sum2=sum2+b[i];
                b[i]=sum2;
            }
    for(long long i=0;i<h3;i++){
                sum3=sum3+c[i];
                c[i]=sum3;
            }
     long long i = 0, j = 0, k = 0;

        while (i < h1 && j < h2 && k < h3)
        {

             if (a[i] == b[j] && b[j] == c[k])
             {   cout << a[i] << " "; return 0;   }


             else if (a[i] < b[j])
                 i++;
             else if (b[j] < c[k])
                 j++;
             else 
                 k++;
        }
        cout<<0;

return 0;
}

我应该对代码进行哪些修改才能运行更大的输入值?
此代码对某些输入给出了错误的答案。 请帮忙

【问题讨论】:

  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • @πάνταῥεῖ 我已验证但未发现错误
  • 我已验证但未发现错误您很可能(当时做错了)。您是否逐行逐行查看每个步骤中的变量以找出行为与您的预期不同的地方。

标签: c++ data-structures stack


【解决方案1】:

您应该在 while 循环中从高值到低值遍历数组。因为我们需要最高的价值。因此更新您的代码

 long long i = h1-1, j = h2-1, k = h3-1;

    while (i >-1 && j > -1 && k >-1)
    {

         if (a[i] == b[j] && b[j] == c[k])
         {   cout << a[i] << " "; return 0;   }


         else if (a[i] > b[j])
             i--;
         else if (b[j] > c[k])
             j--;
         else 
             k--;
    }

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2015-07-19
    • 2012-03-01
    • 2019-12-21
    • 2019-08-14
    相关资源
    最近更新 更多