A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小菜_一碟 中级黑马   /  2016-11-19 19:22  /  586 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

存在该数组: int[] arr = { 16, 23, 9, 6, 1, 23, 6, 7, 8, 23 };
去除上面定义的数组中的重复元素,把去重复后的元素存入新数组中,并打印新数组中的元素
解析:
  1. 思路一(不通用):在考虑不改变原数组中元素的顺寻的情况下,以空间换时间,执行效率高
  2.         //1、找到原数组中最大的元素max
  3.         int max = arr[0];
  4.         for(int i=1;i<arr.length;i++){
  5.                 if(max<arr[i]){
  6.                         max = arr[i];
  7.                 }
  8.         }

  9.         //2、创建一个新数组,数组长度为max+1,将原数组arr中的元素放入新数组中
  10.         int[] arr2 = new int[max+1];
  11.         for(int i=0;i<arr.length;i++){
  12.                 int index = arr[i];
  13.                 arr[index] = arr[i];
  14.         }
  15.        
  16.         //3、遍历arr2中的非零元素存入结果数组res中(arr2中存在的非零元素就是题目所要求的结果)
  17.         int[] res = new int[arr.length];
  18.         int j=0;
  19.         for(int i=0;i<arr2.length;i++){
  20.                 if(arr2[i]!=0){
  21.                         res[j++] = arr2[i];
  22.                 }
  23.         }
  24.        
  25.         for(int i=0;i<res.length;i++){
  26.                 System.out.print(res[i] + '\t');
  27.         }

  28.         思路二(不考虑顺序):结束set集合的唯一性操作
  29.         Set set = new HashSet();
  30.         for (int i=0;i<arr.length ; i++) {
  31.                 set.add(arr[i])
  32.         }
  33.        
  34.         int len = set.size();//获取集合中元素的个数作为新数组的长度
  35.         Iterator iter = set.iterator();
  36.         int[] res = new int[len];//创建新的数组用来存储结果

  37.         int = 0;
  38.         while(iter.hasNext()){
  39.                 res[i++] = iter.next();
  40.         }
复制代码

1 个回复

倒序浏览
个人见解,仅供参考。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马