黑马程序员技术交流社区
标题: 清除数组中的重复元素 [打印本页]
作者: 浮云只想听你説 时间: 2014-7-5 20:37
标题: 清除数组中的重复元素
有数组” int[] arr = {11,2, 4, 2, 10, 11},定义一个函数清除该数组的重复元素,返回一个没有重复元素而且不能出现0元素的数组。
备注:使用最基础的代码解答...
作者: 愤怒的小蔡! 时间: 2014-7-5 21:22
哈哈~~我来凑热闹!
作者: 浮云只想听你説 时间: 2014-7-6 15:56
做出来了吗?
作者: cat73 时间: 2014-7-6 16:02
思路1:新建一个数组,一个个成员向里复制,在复制之前先判断是否存在过
思路2:懒人方案,用无序集合,往里扔就行
作者: 燿陚√揚葳 时间: 2014-7-6 16:15
我是用集合做的
- public static void main(String[] args){
- //定义一个有重复元素的数组
- int[] arr={0,4,2,4,6,1,2,4,7,8};
- //考虑到要去除重复元素,想到Set集合可以除去重复元素
- TreeSet ts=new TreeSet();
- //所以遍历数组,并添加到Set集合中,这样便去除了当中的重复元素
- for(int x=0;x<arr.length;x++){
- if(arr[x]==0)
- continue;
- ts.add(arr[x]);
- }
- System.out.println(ts);
- }
复制代码
作者: cat73 时间: 2014-7-6 16:43
本帖最后由 cat73 于 2014-7-6 16:50 编辑
思路1:新建一个数组,一个个成员向里复制,在复制之前先判断是否存在过
- import java.util.Arrays;
- public class Test{
- public static void main(String[] args) {
-
- int[] srcArray = {1, 1, 1, 3, 4, 5, 6, 7, 888, 888, 888, 9};
- int[] dstArray = test(srcArray);
-
- for(int x : dstArray){
- System.out.print(x + " ");
- }
- }
-
- /**
- * 去除数组中的重复元素
- * @param srcArray 源数组
- * @return 处理后的数组
- */
- public static int[] test(int[] srcArray){
- //首先新建一个与源数组一样长的, 防止源数组中全部不重复
- int[] dstArray = new int[srcArray.length];
-
- //temp用于在内循环中检测是否有重复, index用于记录已经复制了多少个元素, flag用于内循环中的记录
- int temp, index = 0;
- boolean flag;
-
- for(int i = 0; i < srcArray.length; i++){
- temp = srcArray[i];
- flag = false;
- //判断要复制的成员是否已经在新数组中
- for(int x : dstArray){
- if(x == temp){
- flag = true;
- break;
- }
- }
- //如果不在则复制
- if(!flag){
- dstArray[index] = temp;
- index++;
- }
- }
- //最后去掉新数组中没用过的元素
- return Arrays.copyOfRange(dstArray, 0, index);
- }
- }
复制代码
作者: 浮云只想听你説 时间: 2014-7-9 12:38
谢谢,思路1已经收到,思路2没学过...
作者: 浮云只想听你説 时间: 2014-7-9 12:40
- public class Demo5 {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int[] arr={11,2,4,2,10,11,4,4,2,11,11};
- int[] newArr=getNewArr(arr);
- for(int i: newArr){
- System.out.println("["+i+"]");
- }
-
- }
- public static int[] getNewArr(int[] arr)
- {
- int temp=0;
- for(int i=0;i<arr.length-1;i++){
- for(int j=1+i;j<arr.length;j++){
- if(arr[i]==arr[j]&&arr[i]!=0)
- {
- arr[j]=0;
- temp++;
- }
- }
- }
- System.out.println(temp);
- return getNewArr(arr,temp);
- }
- public static int[] getNewArr(int[] arr, int temp){
- int[] newArr = new int[arr.length-temp];
- for(int x=0,y=0;x<arr.length;x++){
- if(arr[x]==0){
- continue;
- }
- newArr[y]=arr[x];
- y++;
- }
- return newArr;
- }
- }
复制代码
作者: 浮云只想听你説 时间: 2014-7-9 12:42
不知道楼上这个方法怎么样,哪里需要完善的吗?总感觉好繁琐
作者: 嗅ㄨiaǒ孑 时间: 2014-7-9 12:44
看别人代码 真烦
作者: 浮云只想听你説 时间: 2014-7-9 14:29
正解.............
作者: 醉、倾鯎 时间: 2014-7-9 17:05
本帖最后由 醉、倾鯎 于 2014-7-9 17:33 编辑
- package cn.ithm.text;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Set;
- /*
- * 有数组” int[] arr = {11,2, 4, 2, 10, 11},
- * 定义一个函数清除该数组的重复元素,
- * 返回一个没有重复元素而且不能出现0元素的数组。
- */
- public class Demo {
- public int[] getNewArr(int[] oldArray) {
- Set set = new HashSet();// 创建一个不允许重复的集合
- for (int i = 0; i < oldArray.length; i++) {
- // 循环遍历参数数组,将参数数组的元素导入集合
- if (oldArray == 0)
- continue;
- set.add(oldArray);
- }
- int[] newArray = new int[set.size()];//创建新数组,数组长度为集合长度
- int count = 0;//创建计数器
- for (Iterator it = set.iterator(); it.hasNext();) {
- newArray[count] = (int) it.next();//把容器内的元素传入新数组
- count++;
- }
- return newArray;//返回新数组
- }
- public static void main(String[] args) {
- int[] arr = new int[] { 11, 2, 4, 2, 10, 11 };
- Demo d = new Demo();
- int[] newArr = d.getNewArr(arr);
- for (int i = 0; i < newArr.length; i++) {
- System.out.println(newArr);
- }
- }
- }
复制代码
原谅我这简陋的代码,我自己看着都难受
作者: 浮云只想听你説 时间: 2014-7-10 22:20
哈哈。能给出答案就非常感谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |