【发布时间】:2016-05-17 23:37:20
【问题描述】:
Stack<Integer> st= new Stack<Integer>();
int max=(int) st.peek();
int top=0;
for(Integer loopVal:st)
{
if(max<loopVal)
max=loopVal;
}
System.out.println(max);
此代码在堆栈中找到最大值,运行良好,但我希望优化其性能,以便它可以处理非常大的堆栈。有人可以提出更好的算法吗?
【问题讨论】:
-
为什么是
Stack?或任何Collection? -
不可能。您访问的最后一个值始终可以具有最大值。
-
如果你不能用一个可以在
O(log(n))(如二叉搜索树)或O(1)(如哈希表)中实现搜索的数据结构更改Stack,那么我不要认为你能获得比线性更好的性能。 -
如果可以更改数据结构,最好将
Max-Heap添加到建议中 -
您提到要针对大量输入进行优化。如果您谈论可伸缩性,则无法优化您的代码。我相信您可以使用某些方法而不是其他方法,尽管它不会特别提到更大输入的运行时间。
标签: java algorithm data-structures