给定一个n个整数的数组,它只能包含从1到n的整数。一些元素可以重复多次,并且阵列中可以不存在一些其他元素。在纸上写一个运行代码,它与输入数组相距O(1)空间,O(n)时间打印数组中不存在哪些元素以及数组中每个元素的计数以及元素号码。
以下是问题的链接和一些解决方案: http://www.careercup.com/question?id=21263687
这是我的解决方案:
import java.util.HashMap;
public class Question {
public static void main(String[] args) {
int arr[] = { 6, 4, 1, 4, 3, 2, 5, 2, 1,6,6,6 };
freq(12, arr);
}
public static void freq(int n, int[] array) {
int[] count = new int[n+1];
for (int i = 0; i < array.length; i++) {
count[array[i]]++;
}
for (int i = 1; i < count.length; i++) {
System.out.println("number" + i + "frequency" + count[i]);
}
}
}
根据别人的解决方案,任何索引处的元素都可以被覆盖,这可能会导致问题?我们可以在这种情况下对数组进行排序,索引i处的值是I + 1本身。
我不明白为什么索引中的元素可以被覆盖?