【发布时间】:2011-05-11 05:17:18
【问题描述】:
我有数组的字符串数组。
List<String[]> mainList = new ArrayList<String[]>();
String[] row1 = {"foo", "bar", "moo"}
String[] row2 = {"cocoa", "zoo", "milk", "coffee"}
mainList.add(row1);
mainList.add(row2);
假设我想找到一个元素“牛奶”。
我可以用 N^2 做。
for(int i=0, j=mainList.size(); i<j; i++) {
for(int x=0, y=mainList.get(i).length(); x<y; x++) {
String item = mainList.get(i)[x];
if(item.equals("milk")) {
return true; //found milk
}
}
}
我试图通过将所有元素作为 Map 键来使其更快。
//put all elements to map key
Map m = new HashMap<String, String>();
for(int i=0, j=mainList.size(); i<j; i++) {
for(int x=0, y=mainList.get(i).length(); x<y; x++) {
m.put(mainList.get(i)[x], "whatever");
}
}
//now iterate and see if key "milk" is found
if(m.contains("milk")) { return true; }
但我认为这仍然是 N^2(即 for 循环内的 for 循环,因为添加到 mainList 的行数如 row3['item1', 'item2', 'item3'],迭代增量为 N ^2)
如何在没有 N^2 的情况下优化它?
【问题讨论】:
-
Map m = new HashMap<String>();这不会编译,因为 Map 有两个类型参数。另外,是什么让你认为这将是 O(n^2)? -
哎呀,我现在修,谢谢指出
标签: java arrays algorithm optimization