唯一元素的和
难度:
标签:
题目描述
代码结果
运行时间: 23 ms, 内存: 16.0 MB
/*
* 思路:
* 使用Java Stream来实现:
* 1. 首先,使用Collectors.groupingBy统计每个数字出现的次数。
* 2. 然后,过滤出出现次数为1的数字,并计算它们的和。
*/
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
public class UniqueElementSumStream {
public int sumOfUnique(int[] nums) {
// 统计每个数字出现的次数
Map<Integer, Long> countMap = Arrays.stream(nums)
.boxed()
.collect(Collectors.groupingBy(num -> num, Collectors.counting()));
// 计算只出现一次的数字的和
return countMap.entrySet().stream()
.filter(entry -> entry.getValue() == 1)
.mapToInt(Map.Entry::getKey)
.sum();
}
public static void main(String[] args) {
UniqueElementSumStream solution = new UniqueElementSumStream();
int[] nums1 = {1, 2, 3, 2};
int[] nums2 = {1, 1, 1, 1, 1};
int[] nums3 = {1, 2, 3, 4, 5};
System.out.println(solution.sumOfUnique(nums1)); // 输出:4
System.out.println(solution.sumOfUnique(nums2)); // 输出:0
System.out.println(solution.sumOfUnique(nums3)); // 输出:15
}
}
解释
方法:
本题解采用哈希表来统计数组中每个元素出现的次数。通过Python的Counter类,首先统计数组nums中每个元素的出现次数。然后遍历这个计数哈希表,只将出现次数为1的元素相加,得到所有唯一元素的和。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
为什么选择哈希表来处理这个问题,而不是其他数据结构如数组或链表?
▷🦆
在统计元素出现次数时,Counter类的内部实现是如何确保准确且高效统计的?
▷🦆
在处理极端情况,如所有元素都是唯一的或没有唯一的元素时,这种方法的表现如何?
▷