【发布时间】:2019-01-27 14:16:00
【问题描述】:
这是我在这里的第一个问题。所以我遇到了来自 HackerEarth 的 this 问题,我使用 HashMap 解决了它。
我认为我的解决方案是正确的,因为在所有 5 个输入中,有 3 个是正确的,但其余两个超过了时间限制。我该如何改进我的解决方案?
我的解决方案:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
class TestClass {
public static void main(String args[] ) throws Exception {
//Scanner
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<n;i++){
int x=sc.nextInt();
Integer value = map.get(x);
if(value == null) {
map.put(x, 1);
}
else if(value<=1) map.put(x,2);
}
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
Integer key = entry.getKey();
if(map.containsKey(k-key)) {
//check if same key
if(k - key == key){
if(map.get(key)>1) {
System.out.println("YES");
return;
}
}
else {
System.out.println("YES");
return;
}
}
}
System.out.println("NO");
}
}
我无法在此处发布输入示例,因为它们大于消息的正文限制......
【问题讨论】:
-
我没有仔细阅读您的代码,但如果我正确理解了任务,您将获得
K的值以及一个数组。因此,您为什么要使用地图?我将从迭代数组开始并检查所有以下元素。然后一种优化可能是首先对数组进行排序并使用二进制搜索方法来查找这些元组。 -
不,抱歉,我尝试通过对元素进行排序来解决它,但计算成本太高了..
-
你是如何排序的?
-
好吧,基本上对数组进行排序是
O(n*lgn),但他的方法是O(n)(好吧,如果我们在使用HashMaps时不考虑系数,则接近O(n)- 但是它们确实存在于现实中) -
@Thomas 我认为没关系(即使使用最好的排序方法也会超过时间限制) - 但为了回答你的问题,我使用了快速排序
标签: java optimization hashmap