找出一个数组中,第一个不重复的数字
今天看到一道面试题,这段时间正好在复习JAVA基础,就拿来练手。
我想到两种方法:
- 利用两个for循环嵌套判断:
遍历数组,在第二个循环中判断每个数组出现的次数,如果只有一次,则在第一个循环中输出该元素。
package com.cn.shencan;
public class TextFive {
public static void main(String[] args) {
int a[] = new int[]{9,8,7,6,5,4,3,2,1,1,2,3,4,5,7,8,9,11};
int index = 0;
for (int i = 0; i <a.length ; i++) {
for(int j = 0 ; j < a.length ; j++){
if (a[i] == a[j]){
index++;
}
}
if (index == 1){
System.out.println(a[i]);
break;
}else {
index = 0;
}
}
}
}
- 通过把数组存入Map集合中,数组元素作为key,出现次数作为value。然后通过遍历Map集合,把第一个value为0的key输出来,并跳出循环。
import java.util.LinkedHashMap;
import java.util.Map;
public class TextFive {
public static void main(String[] args) {
int a[] = new int[]{9,8,7,6,5,4,3,2,1,1,2,3,4,5,7,8,9,11};
Map<Integer ,Integer> map = new LinkedHashMap<>();
for (int i=0;i<a.length;i++){
if (map.containsKey(a[i])) { //判断是否有重复的key,也就是判断是否有重复元素
int volues = map.get(a[i]); //得到value,也就是次数
map.put(a[i],volues+1 ); // 次数+1,重新存入
}else {
map.put(a[i],0); //如为发现有重复元素,则次数为0;
}
}
/*
* 遍历Map集合
*/
for (int i=0;i<a.length;i++){
int value = map.get(a[i]); //得到每个数组元素中的value
if (value==0){ 判断value是否为0
System.out.println(a[i]);
break;
}
}
}
}