题目描述
思路分析
不是每次+1了,而是直接加相同数字出现过的次数,比如有3个1,第二个1就是+1,第三个直接+2,而不是两次+1,而且每次都记录每次的新值出现的次数,这样循环到新数未出现过为止
代码实现
package lanqiao;import java.util.*;
public class Main {static int[] a1 = new int[1000010], a2 = new int[1000010];//一个用于输出,一个用于储存节点public static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();for (int i = 0; i < a; i++) {int count = sc.nextInt();while (true){if (a2[count] == 0) { //确定输入的值是否已经存在a2[count]++;//若不存在则标记推出循环break;}else {a2[count]++;//若存在则为该标识访问次数加一减少循环次数count +=a2[count] - 1;}}a1[i] = count;}for (int i = 0; i < a; i++) {System.out.print(a1[i] + " ");}}
}