Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在堆栈中查找最大值的进一步优化_C++_Stack - Fatal编程技术网

C++ 在堆栈中查找最大值的进一步优化

C++ 在堆栈中查找最大值的进一步优化,c++,stack,C++,Stack,我的问题是插入一个元素,弹出最后一个插入的元素,并打印给定元素中的最大值。我使用了两个堆栈的目的,它是优化的基础上最建议的技术可用。但是我仍然需要进一步优化查询数量qt; 字符查询; 内部细节; 对于(int test=0;test我不确定“优化”是什么意思(在您的案例中尽量减少内存使用,提高执行时间或仅参考算法效率)。下面是@alexeykuzmin0的注释,代码如下所示: std::stack<std::pair<int, int>> stack; for (int

我的问题是插入一个元素,弹出最后一个插入的元素,并打印给定元素中的最大值。我使用了两个堆栈的目的,它是优化的基础上最建议的技术可用。但是我仍然需要进一步优化查询数量qt; 字符查询; 内部细节;
对于(int test=0;test我不确定“优化”是什么意思(在您的案例中尽量减少内存使用,提高执行时间或仅参考算法效率)。下面是@alexeykuzmin0的注释,代码如下所示:

std::stack<std::pair<int, int>> stack;

for (int i = 0; i<q; i++)
{
  std::cin >> query;
  if (query == 'A')
  {
    std::cin >> detail;
    int max = stack.empty() ? detail : std::max(detail, stack.top().second);
    stack.push(std::make_pair(detail, max));
  }
  else if (query == 'R')
  {
    if (!stack.empty())
    {
       stack.pop();
    }
  }
  else
  {
    if (stack.empty())
      std::cout << "Empty\n";
    else
      std::cout << stack.top().second << "\n";
  }
}
std::stack;
对于(int i=0;i>query;
如果(查询=='A')
{
std::cin>>详细信息;
int max=stack.empty()?细节:std::max(细节,stack.top().second);
stack.push(标准::make_pair(细节,最大值));
}
else if(查询='R')
{
如果(!stack.empty())
{
stack.pop();
}
}
其他的
{
if(stack.empty())

std::cout我不确定“优化”是什么意思(在您的案例中尽量减少内存使用,提高执行时间或仅参考算法效率)。下面是@alexeykuzmin0的注释,代码如下所示:

std::stack<std::pair<int, int>> stack;

for (int i = 0; i<q; i++)
{
  std::cin >> query;
  if (query == 'A')
  {
    std::cin >> detail;
    int max = stack.empty() ? detail : std::max(detail, stack.top().second);
    stack.push(std::make_pair(detail, max));
  }
  else if (query == 'R')
  {
    if (!stack.empty())
    {
       stack.pop();
    }
  }
  else
  {
    if (stack.empty())
      std::cout << "Empty\n";
    else
      std::cout << stack.top().second << "\n";
  }
}
std::stack;
对于(int i=0;i>query;
如果(查询=='A')
{
std::cin>>详细信息;
int max=stack.empty()?细节:std::max(细节,stack.top().second);
stack.push(标准::make_pair(细节,最大值));
}
else if(查询='R')
{
如果(!stack.empty())
{
stack.pop();
}
}
其他的
{
if(stack.empty())


STD::CUT考虑使用不两个代码>堆栈 s,但是<代码>堆栈。在这种情况下,它可能会导致更好的缓存。locality@Jarod42我不明白。你在插入那些元素吗?你在执行什么操作?为什么你认为它不起作用?下面输入
4a1a1rq
,你将打印
“Empty”
s
中仍然有
1
。如果我们添加了以下
R
,则会发生不好的情况。我假设您的输入实际上是A6 A1 rq,因此先插入6,然后删除最近的元素(1)并显示最大值。当插入6时,它将同时插入s和max堆栈中。1仅插入s。当移除时,1仅从s中移除(在max堆栈中仍保留6),因此打印max将给出6。我的输入不是您的工作案例
A6 A1 R Q
,而是打印为空的
A1 R Q
如果(detail>max.top())
可能应该是
如果(detail>=max.top())
)考虑不要使用两个<代码>堆栈 s,但是<代码>堆栈。在这种情况下,它可能会导致更好的缓存。locality@Jarod42我不明白。你在插入那些元素吗?你在执行什么操作?为什么你认为它不起作用?下面输入
4a1a1rq
,你将打印
“空”“
s
中仍然有
1
。如果我们添加了以下
R
,则会发生不好的事情。我假设您的输入实际上是A6 A1 rq,因此先插入6,然后删除最近的元素(1)并显示最大值。当插入6时,它将同时插入s和max堆栈中。1仅插入s。当移除时,1仅从s中移除(在max堆栈中仍保留6),因此打印max将给出6。我的输入不是您的工作案例
A6 A1 R Q
,而是打印为空的
A1 R Q
如果(detail>max.top())
可能应该是
如果(detail>=max.top())
)。嗯,您似乎没有检查任何值,因此我假设“R”将删除最近添加的项?因此A6 A1 R Q的堆栈将为6->6,6->6?除非我误解了“R”查询的概念。您能提供无效的输入吗?抱歉,我误解了您的解决方案。问题仍然存在。我正在思考优化我的读/写操作会有帮助。但是你所指的“问题”是什么?解决了。因为我使用的是cin/cout,所以我得到了更多的运行时间。使用scanf/printf解决了问题。不过,你的解决方案在算法空间/时间方面是可能的优化版本。谢谢!std::ios::sync_with_stdio(false);可能会有帮助。嗯,您似乎没有检查任何值,所以我假设“R”只会删除最近添加的项?因此A6 A1 R Q的堆栈将为6->6,6->6?除非我误解了“R”查询的概念。您能提供无效的输入吗?抱歉,我误解了您的解决方案。问题仍然存在。我认为优化我的读/写操作会有所帮助。但是你所指的“问题”是什么?解决了。因为我使用了cin/cout,所以我得到了更多的运行时间。使用scanf/printf解决了它。不过,你的解决方案在算法空间/时间方面是可能的优化版本。谢谢!std::ios::sync_with_stdio(false)可能会有帮助。
std::stack<int> stack;

for (int i = 0; i<q; i++)
{
  std::cin >> query;
  if (query == 'A')
  {
    std::cin >> detail;
    int max = stack.empty() ? detail : std::max(detail, stack.top());
    stack.push(max);
  }
  else if (query == 'R')
  {
    if (!stack.empty())
    {
      stack.pop();
    }
  }
  else
  {
    if (stack.empty())
      std::cout << "Empty\n";
    else
      std::cout << stack.top() << "\n";
  }
}