描述
给定一个整数数组,数组中有一个数出现了一次,其他数出现了三次,请找出只出现了一次的数。
数据范围:数组大小满足 1 \le n \le 10^5 \1≤n≤105 ,数组中每个元素大小满足 -2^{31} \le val \le 2^{31}-1 \−231≤val≤231−1
示例1
输入:[1]
返回值:1
示例2
输入:[1,2,2,2]
返回值:1
题解:
首先创建一个Map,遍历数组,利用键值对表示数组中的元素及其出现的次数。如果第一次出现将其的key值设为1,如果第二次遍历到该数只需使用get方法获取其出现的次数并加1。 再遍历Map,找到key为1对应的value值并输出。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int singleNumber (int[] nums) {
// write code here
Map<Integer,Integer> map = new HashMap<>();
for(int i : nums){
if(map.containsKey(i)){
//说明此时的i已经存在,只需更新出现的次数
int count = map.get(i);
map.put(i,count + 1);
}else{
map.put(i,1);
}
}
//遍历map集合,找到对应出现次数为1的那个key
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
//找到value对应为1的那个元素
if(entry.getValue() == 1){
return entry.getKey();
}
}
return -1;
}
}