Question
给定一个长度为n的数组,该数组中的每个元素在1到n范围内,要求在O(n)的时间复杂度,O(1)的空间复杂度下,打印1到n这n个数各出现了多少次。
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| int[] input = {3,4,1,1,1,2,2,4,3,3,3,3}; int i = 0; while (i < input.length) { int val = input[i]; if (val < 0) { i++; continue; } if (val != i) { if (input[val] > 0) { swap(input, val, i); input[val] = -1; continue; }else { input[val]—; input[i] = 0; i++; } } } for(i = 1; i < input.length; i++) { System.out.print(input[i] * (-1) +" "); }
|