我正在尝试解决这个问题:
给出一个只有3个唯一数字的整数数组,它们会在O(n)时间中以升序(及其各自的频率)打印数字。
我想不使用counting sort
算法来解决它,所以我想我可以做一个for loop
并将数字插入到HashMap
中,然后通过loop
插入HashMap entrySet
并打印所需的信息。
这里是功能:
public static void printOut(int[] arr){
Map<Integer,Integer> hm=new HashMap<Integer,Integer>();
for(int num : arr){
if(hm.containsKey(num)){
hm.put(num,hm.get(num)+1);
}else{hm.put(num,1);}
}
for(Map.Entry<Integer,Integer> entry : hm.entrySet()){
System.out.println("Key= "+entry.getKey()+" Value= "+entry.getValue());
}
}
当我的数组为[[3, 3, 2, 1, 3, 2, 1]
]时,它起到了欺骗的作用>
但是上述数组不应该导致任何冲突,因此我尝试使用应该导致冲突的数组,我测试了我的函数的数组之一是:[6,6,9,9,6,3,9]
但是我的函数仍然以升序打印Keys
订单,这让我感到困惑,因为我认为当Key
的HashMap
是整数时,哈希码应为hashIndex = key % noOfBuckets
,因此当我将数字6, 9 and 3
作为我的HashMap keys
时,我以为会有冲突,我的函数应该打印(基于上面使用的数组):
Key= 6 Value= 3 Key= 9 Value= 3 Key= 3 Value= 1
但是打印出来是:
Key= 3 Value= 1 Key= 6 Value= 3 Key= 9 Value= 3
任何人都可以向我解释为什么我要为要解决的问题找到正确的解决方案,而不是我期望的答案吗?
谢谢。
我正在尝试解决这个问题:给定只有3个唯一数字的整数数组,它们会在O(n)时间中以升序(及其各自的频率)打印数字。我想解决...
摘录自实施说明