如何在一维数组中查找某重复元素,并输出其位置?
如int数组{12,18,19,15,26,29,49,15,12,19,29,12,18};
12 {0,8,11}
15 {3,7}
18 {1,12}
如何在一维数组中查找某重复元素,并输出其位置?
如int数组{12,18,19,15,26,29,49,15,12,19,29,12,18};
12 {0,8,11}
15 {3,7}
18 {1,12}
这种情况适合使用 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<Integer, List<Integer>> map = new LinkedHashMap<>(); // LinkedHashMap 可以维护键值对 加入 map 的顺序
for (int i = 0; i < nums.length; i++) {
List<Integer> 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<Integer, List<Integer>> entry : map.entrySet()) {
List<Integer> positions = entry.getValue();
if (positions.size() > 1) { // 如果一个整数对应的位置数量大于 1,说明这个整数重复
int num = entry.getKey();
printResult(num, positions);
}
}
}
private static void printResult(int num, List<Integer> 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);
}
}
15 回答6.9k 阅读
2 回答3.3k 阅读✓ 已解决
3 回答7k 阅读✓ 已解决
5 回答4.7k 阅读
3 回答5.2k 阅读
4 回答2.4k 阅读
1 回答3k 阅读✓ 已解决
初学者。希望能有帮助。