存在该数组: int[] arr = { 16, 23, 9, 6, 1, 23, 6, 7, 8, 23 };
去除上面定义的数组中的重复元素,把去重复后的元素存入新数组中,并打印新数组中的元素
解析:
- 思路一(不通用):在考虑不改变原数组中元素的顺寻的情况下,以空间换时间,执行效率高
- //1、找到原数组中最大的元素max
- int max = arr[0];
- for(int i=1;i<arr.length;i++){
- if(max<arr[i]){
- max = arr[i];
- }
- }
- //2、创建一个新数组,数组长度为max+1,将原数组arr中的元素放入新数组中
- int[] arr2 = new int[max+1];
- for(int i=0;i<arr.length;i++){
- int index = arr[i];
- arr[index] = arr[i];
- }
-
- //3、遍历arr2中的非零元素存入结果数组res中(arr2中存在的非零元素就是题目所要求的结果)
- int[] res = new int[arr.length];
- int j=0;
- for(int i=0;i<arr2.length;i++){
- if(arr2[i]!=0){
- res[j++] = arr2[i];
- }
- }
-
- for(int i=0;i<res.length;i++){
- System.out.print(res[i] + '\t');
- }
- 思路二(不考虑顺序):结束set集合的唯一性操作
- Set set = new HashSet();
- for (int i=0;i<arr.length ; i++) {
- set.add(arr[i])
- }
-
- int len = set.size();//获取集合中元素的个数作为新数组的长度
- Iterator iter = set.iterator();
- int[] res = new int[len];//创建新的数组用来存储结果
- int = 0;
- while(iter.hasNext()){
- res[i++] = iter.next();
- }
复制代码 |
|