HashMap找到所有加起来给出数字k的对

Aka*_*ngh -2 java hashmap

我想找到一个数组中的所有对,总结得到一个数字K.我正在考虑在java中使用HashMap技术.这个问题是数组可能有重复的条目.如何为同一个键存储多个值?我不想使用任何像MultiMap这样的外部库.比方说,数组是{2,4,3,2,1},数字k = 5.该技术应该给出总和为5的所有对的指数.输出应该是(0,2)(2,3)(1,4)

谢谢.

这是我写的代码

class NewClass {

public static void main(String[] args)throws Exception{
   int arr[]={2,4,3,2,1},k=5;
   HashMap<Integer,ArrayList<Integer>> map=new HashMap<>();

   int i;
   for(i=0;i<5;i++)
   {
       if(map.containsKey(arr[i])){
           ArrayList<Integer> offset=map.get(arr[i]);
           offset.add(i);
           map.put(arr[i], offset);
       }
       else{
           ArrayList<Integer> offset=new ArrayList<>();
           offset.add(i);
           map.put(arr[i], offset);
       }        
   }

   for(i=0;i<5;i++){
       if(map.containsKey(k-arr[i])){
           ArrayList<Integer> offset=map.get(arr[i]);
           for(int a:offset){
               System.out.println(i+" "+a);
           }
       }
   }
}   
Run Code Online (Sandbox Code Playgroud)

}

我得到的O/P是

0 0 0 3 1 1 2 2 3 0 3 3 4 4

你能告诉我这段代码有什么问题吗?请耐心等待我,因为我不熟悉编码.

Ste*_*n C 6

我们可以为你解决问题,但是你不会学到任何东西.所以我会给你一些提示:

  • 如果你有A和B需要加起来N,你知道A,那么B必须是N - A.

  • 创建一个hashmap,它将数字映射到原始数组中出现数字的偏移列表.

其余的只是使用/开发你的问题解决和编程技巧.想一想.去编码吧.如果你遇到困难,请告诉我们你做了什么,并提出一个具体问题.