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

时间:2014-02-09 06:14:02

标签: 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);
           }
       }
   }
}   

}

我得到的O / P是

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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