给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
输入:nums = [2,2,3,2]
输出:3
示例 2:
输入:nums = [0,1,0,1,0,1,100]
输出:100
提示:
1 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次
进阶:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
解法1
遍历数组,hashmap存储,然后再次遍历,找出value==1的元素
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
class Solution {
/**
* @Title: singleNumber
* @Description: HashMap存储,key为nums[i],value为出现的次数
* @author: itbird
* @date 2022年3月29日 下午3:39:09
* @param nums
* @return int 时间复杂度: O(N) 空间复杂度: O(N)
*/
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
int res = nums[0];
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
}
Iterator<Entry<Integer, Integer>> iterator = map.entrySet().iterator();
int result = 0;
while (iterator.hasNext()) {
Entry<Integer, Integer> entry = iterator.next();
if (entry.getValue() == 1) {
result = entry.getKey();
}
}
return result;
}
}
网友评论