扫码关注官方订阅号
如何在一维数组中查找某重复元素,并输出其位置?如int数组{12,18,19,15,26,29,49,15,12,19,29,12,18};12 {0,8,11}15 {3,7}18 {1,12}
小伙看你根骨奇佳,潜力无限,来学PHP伐。
public static void main(String[] args) { Integer[] numbers={12,18,19,15,26,29,49,15,12,19,29,12,18}; //集合用来存放不重复的数字 ArrayList<Integer> numberArray=new ArrayList<>(); //嵌套集合用来存放重复数字的角标 ArrayList<ArrayList<Integer>> numberIndex=new ArrayList<>(); //集合中存放重复出现的数字 ArrayList<Integer> sameArray=new ArrayList<>(); for(int i=0;i<numbers.length;i++){// //只遍历一遍 if(!numberArray.contains(numbers[i])){ //新数字存进集合 numberArray.add(numbers[i]); } else{ if(!sameArray.contains(numbers[i])){ //重复数字存进集合 sameArray.add(numbers[i]); //在这个嵌套集合中创建存有这个数字角标的集合 ArrayList<Integer> numberHead=new ArrayList<>(); //把第一次出现该数字的角标存进集合 numberHead.add(new Integer(numberArray.indexOf(numbers[i]))); numberIndex.add(numberHead); } //把此次出现的该数字的角标存进集合 numberIndex.get(sameArray.indexOf(numbers[i])).add(new Integer(i)); } } //输出结果 for(int i=0;i<sameArray.size();i++){ System.out.println(sameArray.get(i)+"\t"+numberIndex.get(i).toString()); } }
初学者。希望能有帮助。
这种情况适合使用 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); } }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
初学者。希望能有帮助。
这种情况适合使用 Map,Map 的键 为 nums 中的整数,值 为 nums 中整数的所有位置 —— 位置数大于 1,那么说明该整数在数组中重复