去除数组的重复元素并排序

去除数组的重复元素并排序

  • 数组不可缩小和扩容,所以先新建一个同原数组相同长度的新数组

  • 先对原数组进行排序,这样原数组元素依次存储到新数组后,新数组也是有序的

  • 因为新数组内是没有数组的,所以原数组的第一个元素一定不会重复,先把第一个元素存入新数组

  • 声明一个新数组下标起始值为0

  • 声明一个统计重复次数的变量count,因为重复多少次就证明原数组需要去除多少位元素

  • 遍历原数组(从下标1开始)

  • 取出原数组的元素,同新数组的最后一位元素判断是否相等

  • 为啥同新数组最后一位元素进行判断,而不同前面的元素进行判断呢?

    (1)因为已经将原数组进行了排序,并且是依次判断存入新数组

    (2)取得原数组的元素下标时,前面的元素都进行判断存入了新数组,所以说新数组最后一个元素之前都小于该原数组的下标元素,不用进行判断

  • 如果不相等就存入新数组

  • 相等就变量count加一

  • 遍历结束,返回新数组的前array.length - count位

  • 在这里插入图片描述

    去重方法

 public static int[] arrayDistinct(int [] array) {
        int [] array1 = new int [array.length]; // 新数组
        Arrays.sort(array); // 原数组排序
        array1[0] = array [0]; // 排好序的原数组的第一元素,一定会存入新数组
        int k = 0; // 新数组下标起始值
        int count = 0; //统计重复次数
        for (int i = 1; i < array.length; i++) { //因为 0 下标元素,已存入新数组, 所以循环从1 开始
            System.out.println("取出原数组下标元素为:" + array[i]);
            System.out.print("第"+i+"次判断\t");
            if(array1[k] != array[i]){ // 取出原数组的元素,与 新数组的最后一个元素进行判断
                array1[k + 1] = array[i];// 如果不相等,将原数组元素存储到新数组内
                System.out.println("元素不同,已存入新数组");
                k++; // 新数组下标加一
            }else {
                count++;//如果不相等, 统计重复次数
                System.out.println("元素相同,不存入新数组,count加一为:"+count);
            }

            System.out.println("新数组:"+Arrays.toString(array1) + "\t重复次数:" + count);
        }
        return   Arrays.copyOf(array1,array1.length - count); // 返回新数组的前array.length - count位
    }

主方法

   public static void main(String[] args) {
        int [] array = {1,2,4,4,4,5,6,7,8,9};
        System.out.println("去重前:"+Arrays.toString(array));
        System.out.println("去重后"+arrayDistinct(array).toString());
    }

控制台
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值