题目一:
给你一个整数数组 nums ,除某个元素仅出现一次外,其余每个元素都恰出现三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99
思路:使用hashMap,
以键值对的方式,记录下每个数字出现的次数,最后遍历map,找到值为1的键,输出即可。
特别注意:map的遍历方式!!!
for(Map.Entry<Integer,Integer> entry : map.entrySet())
class Solution {
public int singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
if(map.get(nums[i]) == null){
map.put(nums[i],1);
} else{
map.put(nums[i],map.get(nums[i])+1);
}
}
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() == 1){
return entry.getKey();
}
}
return -1;
}
}
题目二:
给定一个整数数组
nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。
示例一:
输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。
示例二:
输入:nums = [0,1]
输出:[1,0]
与上个题目大同小异,最后由于要返回的是数组类型,所以先遍历出map里面有多少个元素,再循环遍历每个元素加入到数组中。
class Solution {
public int[] singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
if(map.get(nums[i]) == null){
map.put(nums[i],1);
} else{
map.put(nums[i],map.get(nums[i])+1);
}
}
int size = 0;
//由于要返回的是数组类型,所以先遍历出map里面有多少个元素
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() == 1){
size++;
}
}
//往数组中循环加入每一个元素
int[] ret = new int[size];
int index = 0;
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() == 1){
ret[index++] = entry.getKey();
}
}
return ret;
}
}