这是我的第一个问题。因此我遇到了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");
}
}
我无法在此处发布输入示例,因为它们大于消息的正文限制。...
答案 0 :(得分:0)
您可以修改第一个for
循环,以不包括所有数字,仅包括小于k
的数字(为什么?因为您的所有数字都是正数,而您无法获得{{ 1}}是其中一个数字大于或等于k
的加法结果。
旧代码:
k
修改版本:
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(int i=0;i<n;i++){
int x=sc.nextInt();
Integer value = map.get(x);
if(x < k){
if(value == null) {
map.put(x, 1);
}
else if(value<=1) map.put(x,2);
}
}