我下面有一个片段。我必须实施addTrade
和printTop
public static void main(String args[] ) throws Exception {
MostTraded mt = new MostTraded();
mt.addTrade("IBM", 1000);
mt.addTrade("AAPL", 500);
mt.addTrade("NFLX", 600);
mt.addTrade("AAPL", 900);
mt.printTop(2); // AAPL 1400, IBM 1000
}
这两种方法的签名如下:
public void addTrade(String instrument, int volume)
public void printTop(int count)
printTop
的论据意味着打印那些交易量很大的股票。例如,printTop(2)
将意味着前2交易股票。添加必须高效,这也意味着股票可以多次交易,在这种情况下volume
需要更新。
我有以下想法来解决它,但不确定是否有更好的方法。
要实现有效添加查找和添加库存的值,我可以使用简单的HashMap
和<stockname, volume>
要执行printTop
,我可以使用密钥为TreeMap
且值为volume
的{{1}}来跟踪。
显然,当我这样做Set<String>
时,我也必须修改addTrade
中的条目。
有没有更好的方法来解决同样的问题?
答案 0 :(得分:0)
这取决于您要寻找的优化程度。如果您正在编写实时交易应用程序,您将希望它尽可能快。维护字符串集的TreeMap不会非常有效。您只想在N个项目中找到 top K 。因此,您需要partial sort algorithm。 C ++已经将部分排序方法作为标准;不幸的是,Java还没有。但你可以在网上找到第三方网站或自己写一个。