# 如何获取一个数组中不重复的元素

0
[已解决问题] 解决于 2018-05-11 11:09
`Integer[] array = new Integer[]{1,2,3,1,2,3,4};`

0
```import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Random;

public class FindRepetition {
private static final int index = 100000;
private static int[] nums = new int[index];

static {
Random random = new Random();
for(int i = 0; i < index; i++) {
nums[i] = random.nextInt(index);
}
}

public static void main(String... args) {
long startTime1 = System.currentTimeMillis();
List<Integer> result1 = findRepetitionTime(nums);
System.out.println(String.format("时间效率优先，耗时：%s", (System.currentTimeMillis() - startTime1)));
long startTime2 = System.currentTimeMillis();
List<Integer> result2 = findRepetitionSpace(nums);
System.out.println(String.format("时间效率优先，耗时：%s", (System.currentTimeMillis() - startTime2)));
}

//时间效率优先
private static List<Integer> findRepetitionTime(int... nums) {
List<Integer> result = new ArrayList<Integer>();
Map<Integer, Integer> countMap = new HashMap<Integer, Integer>(8);
for(int num: nums) {
if(countMap.containsKey(num)) {
countMap.put(num, countMap.get(num));
} else {
countMap.put(num, 1);
}
}
for(Map.Entry<Integer,Integer> entry: countMap.entrySet()) {
if(entry.getValue() == 1) {
}
}
return result;
}

//空间效率优先
private static List<Integer> findRepetitionSpace(int... nums) {
List<Integer> result = new ArrayList<Integer>();
for (int i = 0; i < nums.length; i++) {
int count = 0;//标记重复次数
for (int j = 0; j < nums.length; j++) {
if(nums[i] != nums[j]) {
count++;
}
if(count==nums.length-1) {
break;
}
}
}
return result;
}
}```

print:

```时间效率优先，耗时：78

0

C# 中可以用lambda

var temp=array.GroupBy(a => a).Where(b => b.Count() =1);之后可以直接循环取key值就好了

foreach (var r in temp)
r.key;

0

for (int i = 0; i < array.length; i++) {
int count = 0;//标记重复次数
for (int j = 0; j < array.length; j++) {
if(array[i] != array[j]) {
count++;
}
if(count==array.length-1) {
System.out.println(array[i]+"this is true");
break;
}
}
}

0

您需要登录以后才能回答，未注册用户请先注册