zoukankan      html  css  js  c++  java
  • Java数组元素去重(不使用集合)

    /*
    * 需求:去除整型数组中重复的元素,不能使用集合等方法
    *
    * 解决思路:
    *       1、对数组中的元素进行从小到大的顺序排序
    *       2、获取数组中重复元素的个数
    *       3、获取数组中重复元素的索引位置,并存入创建的索引数组
    *       4、创建去重数组,去重数组长度 = 原始数组长度 - 重复元素个数
    *       5、将原始数组的值赋给去重数组,遇到重复元素的索引位置则不赋值
    */
    
    public class ShuZu {
        public static void main(String[] args) {
            int OldArray[] = {0,1,6,2,2,3,3,5,87,43,12,3,123,43,3,42,3,12,31,23,12,3,1,23,1,6,5,23};
            //遍历原始数组
            System.out.println("原始数组:");
            for (int i = 0; i < OldArray.length; i++) {
                System.out.print(OldArray[i] + " ");
            }
            System.out.println();   //换行作用
            //冒泡排序,从小到大排序
            for (int i = 1; i < OldArray.length; i++) {
                for (int j = 0; j < OldArray.length - i; j++) {
                    if (OldArray[j] > OldArray[j+1]){
                        int temp = OldArray[j];
                        OldArray[j] = OldArray[j + 1];
                        OldArray[j + 1] = temp;
                    }
                }
            }
    
            //计算重复元素的个数
            int count = 0;
            for (int i = 0; i < OldArray.length - 1; i++) {
                //若后面元素等于前面元素,则表示有重复元素
                if (OldArray[i] == OldArray[i + 1]){
                    count++;
                }
            }
    
            //创建索引数组,保存原始数组中重复元素的索引位置
            int index = 0;
            int indexArray[] = new int[count];
            for (int i = 0; i < OldArray.length - 1; i++) {
                //若后面元素等于前面元素,则将后面元素的索引位置赋给索引数组
                if (OldArray[i] == OldArray[i + 1]){
                    indexArray[index] = i + 1;
                    index++;
                }
            }
    
            //创建去重数组
            int newArray[] = new int[OldArray.length - count];
            //定义索引数组的起始索引位置
            int indexOfIndexArray = 0;
            //定义去重数组的起始索引位置
            int indexOfNewArray = 0;
            for (int i = 0; i < OldArray.length; i++) {
                //索引位置不能超过索引数组的边界
                if(indexOfIndexArray < indexArray.length){
                    if(i == indexArray[indexOfIndexArray]){
                        indexOfIndexArray++;
                    }else {
                        //非重复元素赋予去重数组
                        newArray[indexOfNewArray] = OldArray[i];
                        //去重数组的索引位置自增1
                        indexOfNewArray++;
                    }
                } else {
                    //非重复元素赋予去重数组
                    newArray[indexOfNewArray] = OldArray[i];
                    //去重数组的索引位置自增1
                    indexOfNewArray++;
                }
            }
            //遍历去重数组
            System.out.println("去重数组:");
            for (int i = 0; i < newArray.length; i++) {
                System.out.print(newArray[i] + " ");
            }
    
        }
    }
    

    运行结果如下:

    原始数组:
    0 1 6 2 2 3 3 5 87 43 12 3 123 43 3 42 3 12 31 23 12 3 1 23 1 6 5 23 
    去重数组:
    0 1 2 3 5 6 12 23 31 42 43 87 123
    
  • 相关阅读:
    2015.2.27 UltraEdit中显示XML结构
    2015.1.31 DataGridView自动滚动到某行
    2015.1.15 利用函数实现将一行记录拆分成多行记录 (多年想要的效果)
    2015.1.15 利用Oracle函数返回表结果 重大技术进步!
    2015.1.15 利用Oracle函数插入表结构 Bulk collect into 不用循环,简洁高效
    2015.1.8 Left join 左连接
    2015.1.10 解决DataGridView SelectionChanged事件自动触发问题
    delphi 遍历窗口
    delphi 访问 protected 属性 哈哈
    clientdataset 读取excel 如果excel 文件不存在的时候 相应的gird 会不显示数据, 鼠标掠过 gird 格子 才会显示数据。 这是一个bug 哈哈
  • 原文地址:https://www.cnblogs.com/xuliang-daydayup/p/12945959.html
Copyright © 2011-2022 走看看