如何从HackerEarth优化此练习?

时间:2018-08-21 11:38:43

标签: java optimization hashmap

这是我的第一个问题。因此我遇到了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");

    }
}

我无法在此处发布输入示例,因为它们大于消息的正文限制。...

1 个答案:

答案 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);
            }
        }