黑马程序员技术交流社区

标题: 关于数组去重复的其他思路(不用集合) [打印本页]

作者: ℃葫芦    时间: 2015-8-15 10:08
标题: 关于数组去重复的其他思路(不用集合)
本帖最后由 ℃葫芦 于 2015-8-15 19:12 编辑

基础测试题里有个题是这样的:数组去重复,例如: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}

看到这个题首先想到的是将数组转为集合去重之后再赋给新数组。
然后我还有一个别的想法,不用集合,如何实现去重?下面给上代码

  1. public class Test5 {
  2.         public static void main (String [] args){
  3.                 int [] arr={4,2,4,6,1,2,4,7,8,2};
  4.                 //去重前打印演示
  5.                 for (int x = 0 ; x<arr.length;x++){
  6.                         System.out.print(arr[x]);
  7.                 }
  8.                 //换行
  9.                 System.out.println();
  10.                 //调用quChong方法去重。
  11.                 int[]arr2=quChong(arr);
  12.                 //去重后打印演示
  13.                 for (int y = 0 ; y<arr2.length;y++){
  14.                         System.out.print(arr2[y]);
  15.                 }
  16.         }

  17.         //定义一个函数,用于将int型数组去重
  18.         public static int[] quChong (int[] arr){
  19.                 //定义一个变量来记录复制的次数
  20.                 int z = 0;
  21.                 for (int x = 0 ; x < arr.length-1-z; x++){
  22.                         for (int y = x+1; y < arr.length-x-z; y++){
  23.                                 //如果有重复的,就用复制粘贴的方法将重复的覆盖。
  24.                                 if (arr[x] == arr[y]) {
  25.                                         System.arraycopy(arr , y+1 , arr , y , arr.length-y-1);
  26.                                         z++; y--;
  27.                                 }                                       
  28.                         }
  29.                 }
  30.                 //新建一个长度为(旧数组长度-复制次数)的数组,将不重复的元素存入。
  31.                 int [] ne = new int [arr.length-z] ;
  32.                 for (int i = 0  ; i<ne.length ; i++){
  33.                         ne[i]=arr[i];
  34.                 }
  35.         //将去重后的数组返回。
  36.         return ne;
  37.         }
  38. }
复制代码

欢迎大家测试以及提出更好的建议,比如简化书写或者提高效率。


作者: ℃葫芦    时间: 2015-8-15 19:13
刚做了些修改完善。
作者: backin    时间: 2015-8-17 09:21
用迭代是不是要简洁一点啊{:2_40:}
作者: l_15562009298    时间: 2015-8-17 10:05
用递归试试
作者: 风华正茂    时间: 2015-8-17 12:31
谢谢楼主分享,楼主辛苦了
作者: ℃葫芦    时间: 2015-8-17 13:44
经过测试,有问题  再添加一些数字进去就会出现结尾处去不掉的问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2