如何在一维数组中查找某重复元素,并输出其位置?用java实现

发布于 2022-09-04 07:52:16 字数 124 浏览 7 评论 0

如何在一维数组中查找某重复元素,并输出其位置?
如int数组{12,18,19,15,26,29,49,15,12,19,29,12,18};
12 {0,8,11}
15 {3,7}
18 {1,12}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

任性一次 2022-09-11 07:52:16
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());
    }
}

初学者。希望能有帮助。

夜访吸血鬼 2022-09-11 07:52:16

这种情况适合使用 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);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文