文章目录
题目描述
748. 只出现一次的数字
难度 简单
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 用一个hashmap来做统计,再遍历,返回计数为1的数字,OK。
- 用HashSet实现。
- 用队列结构来实现。
- 神奇而有趣的位运算异或^运算的应用。
代码实现
算法实现1(HashMap)_时间复杂度O(₂ₙ)=O(ₙ)空间复杂度O(ₙ),11 ms
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> integerIntegerHashMap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
integerIntegerHashMap.put(nums[i], integerIntegerHashMap.getOrDefault(nums[i], 0) + 1);
}
Set<Integer> integers = integerIntegerHashMap.keySet();
for (int i : integers) {
if (integerIntegerHashMap.get(i) == 1) return i;
}
return -1;
}
}
改进后:
class Solution {
public int singleNumber(int[] nums) {
Map<Integer, Integer> integerHashMap = new HashMap<>();
for (int num : nums) {
if (integerHashMap.containsKey(num)){
integerHashMap.remove(num);
} else {
integerHashMap.put(num, 1);
}
}
Set<Integer> set = integerHashMap.keySet();
Iterator<Integer> iterator = set.iterator();
return iterator.next();
}
}
执行结果:通过
执行用时:11 ms, 在所有 Java 提交中击败了14.83% 的用户
内存消耗:38.4 MB, 在所有 Java 提交中击败了77.45% 的用户
通过测试用例:61 / 61
算法实现2(HashSet)_时间复杂度O(ₙ)空间复杂度O(ₙ),11 ms
class Solution {
public int singleNumber(int[] nums) {
Set<Integer> integerHashSet = new HashSet<>();
for (int a : nums) {
if (integerHashSet.contains(a)) {
integerHashSet.remove(a);
} else {
integerHashSet.add(a);
}
}
return (int) integerHashSet.toArray()[0];
}
}
算法实现3(Queue)_时间复杂度O(ₙ)空间复杂度O(ₙ),543 ms
class Solution {
public int singleNumber(int[] nums) {
Queue<Integer> integerQueue = new LinkedBlockingQueue<Integer>();
for (int a : nums) {
if (integerQueue.contains(a)) {
integerQueue.remove(a);
} else {
integerQueue.offer(a);
}
}
return integerQueue.peek();
}
}
算法实现4(神奇而有趣的位运算异或^运算的应用)_时间复杂度O(ₙ)空间复杂度O(1),1 ms
class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for (int a : nums) {
res = res ^ a;
}
return res;
}
}
记录与总结,2021年 12月 11日 星期六 04:50:19 CST。