JAVA去掉数组重复数字

去掉一个已经排好序的数组的重复数字,执行速度也是考虑的问题。

package JAVA_Project_01_04;//创建一个包
/*
提供两种思路解决去掉重复数字:第一种是增加一个数组,但是长度无法确定,记录没有重复的值;
第二种是增加一个数组,用于记录原数组中存在的数,再增加一个数组可以确定数组的长度,用于存放原数组的值。
 */
public class TextDelRepeat {//操作去掉数组中重复数字的类

    public static int[]changeMethodOne(int src[]){//方法一  去掉重复数字
        int length=src.length;//获得传入数组的长度
        int[] taget =new int[length];//声明一个数组,长度为传入数组的长度
        int index = 0;
        taget[0]=src[0];//设置数组的初始值
        for (int i = 1; i < length; i++) {//循环遍历传入数组
            if (taget[index]!=src[i]){//遍历数组与初始值进行比较
                index++;//等价于index=index+1
                taget[index]=src[i];//元素赋值
            }
        }
        return taget;//返回结果数组
    }

    public static int[]changeMethodTwo(int src[]){//方法二  去掉重复数字
        int length =src.length;//获得传入数组的长度
        int[] tagetIndex=new int[length];//声明一个数组,长度为传入数组的长度
        int tagetLength = length;
        for (int i = 0; i < length; i++) {
            tagetIndex[i]=0;//初始化tagetIndex
        }
        for (int j = 1; j < length; j++) {//记录重复的值
            if (src[j]==src[j-1]){
                tagetIndex[j]=1;
                tagetLength--;
            }
        }
        int[] target =new int[tagetLength];
        int index=0;
        for (int k = 0; k < length; k++) {//循环将数组赋值
            if (tagetIndex[k]==0){//数组元素等于1是存放重复数字
                target[index++]=src[k];
            }
        }
        return target;
    }

    public static void main(String[] args) {
        int[] a={1,1,1,2,3,4,5,6,9,9,12,53};//声明数组并初始化
        int[] b=changeMethodOne(a);//调用第一种方法去掉重复数字
        System.out.println("第一种方法去掉数组中重复的数字结果:");
        for (int i = 0; i < b.length; i++) {//将返回的数组输出
            System.out.println(b[i]+" ");
        }
        System.out.println();
        System.out.println("第二种方法去掉数组中重复数字结果:");
        int[] c=changeMethodTwo(a);//调用第二种方法去掉重复数字
        for (int i = 0; i < c.length; i++) {//将返回的数组输出
            System.out.println(c[i]+" ");
        }
    }
}
/*
在changeMethodone()方法中,声明一个与传入数组长度相等的数组,根据循环判断是否有重复的数字,并将不重复
的数字放入声明的数组中,如果传入数组中存在重复的数字,那么这个数组的长度应会小于传入数组的长度,这样也就造成了数组长度的浪费。
在ChangeMothodTwo()方法中,也声明一个与传入数组长度相等的数组tagetIndex,值初始化全为0.循环进行判断重复数字的个数,如果存在重复数字则
数组tagetIndex元素赋值为1.然后声明一个数组target,长度为(tagetIndex.length-重复数字个数)。当tagetIndex数组中元素为0的,
将数组src元素下标等于tagetIndex元素中不为0的下标的元素赋值给target.
 */
发布了70 篇原创文章 · 获赞 10 · 访问量 3202

猜你喜欢

转载自blog.csdn.net/JN_Cat/article/details/102588911
今日推荐