这种情况适合使用 Map,Map 的键 为 nums 中的整数,值 为 nums 中整数的所有位置 —— 位置数大于 1,那么说明该整数在数组中重复
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
int[] nums = {12, 18, 19, 15, 26, 29, 49, 15, 12, 19, 29, 12, 18};
// map 的键 为 nums 中的整数,值 为 nums 中整数的位置
Map> map = new LinkedHashMap<>(); // LinkedHashMap 可以维护键值对 加入 map 的顺序
for (int i = 0; i < nums.length; i++) {
List positions = map.get(nums[i]);
if (positions == null) { // 如果 map 的键 中不存在这个整数
positions = new ArrayList<>(1);
map.put(nums[i], positions); // 将这个整数和与其关联的位置 positions 放入 map
}
positions.add(i);
}
for (Map.Entry> entry : map.entrySet()) {
List positions = entry.getValue();
if (positions.size() > 1) { // 如果一个整数对应的位置数量大于 1,说明这个整数重复
int num = entry.getKey();
printResult(num, positions);
}
}
}
private static void printResult(int num, List positions) {
StringBuilder result = new StringBuilder();
result.append(num).append(' ').append('{');
for (Integer position : positions) {
result.append(position).append(',');
}
result.setCharAt(result.length() - 1, '}'); // 把最后一个 , 替换为 }
System.out.println(result);
}
}