返回
日拱算法:别只找到一个没出现过的数字,让我统计所有的!
前端
2024-01-29 22:22:13
日拱算法:只出现一次的数字
作为一名算法爱好者,我不断挑战自己的极限,力求解锁更多算法难题。最近,我被一道题难住了:给定一个整数数组,如何找到其中只出现一次的数字?
一番苦思冥想后,我终于悟出了这道题的精髓:利用哈希表来记录每个数字出现的次数,然后遍历哈希表,找出只出现一次的数字即可。
哈希表闪亮登场
哈希表是一种高效的数据结构,可以快速查找、插入和删除元素。它的工作原理是将元素映射到一个哈希值,然后将元素存储在哈希值对应的存储位置上。这样,查找一个元素时,只需要计算它的哈希值,然后直接跳转到对应的存储位置即可。
我的算法详细解析
有了哈希表打底,我的算法就变得轻而易举了:
- 首先,创建一个哈希表,将数组中的每个元素作为键,出现的次数作为值存储到哈希表中。
- 然后,遍历哈希表,找出值等于1的键,这些键就是只出现一次的数字。
- 最后,将这些只出现一次的数字收集起来,形成一个新的数组,并返回这个数组。
代码实现
import java.util.HashMap;
class Solution {
public int[] singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
// 统计每个数字出现的次数
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
// 找出只出现一次的数字
ArrayList<Integer> result = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
result.add(entry.getKey());
}
}
// 将结果数组转换成基本类型数组并返回
return result.stream().mapToInt(i -> i).toArray();
}
}
算法优势
我的算法具有以下优势:
- 时间复杂度为O(n),其中n为数组的长度。这是因为哈希表可以实现快速查找、插入和删除元素。
- 空间复杂度也为O(n),因为哈希表需要存储n个元素。
扩展应用
我的算法不仅可以用于统计只出现一次的数字,还可以用于统计出现多次的数字、统计最大值和最小值等。
结语
日拱算法让我体会到了算法之美,也让我对自己的能力有了新的认识。我相信,只要不断努力,不断学习,我一定能够在算法领域取得更大的成就。