1748. 唯一元素的和
1748. 唯一元素的和
题目
You are given an integer array nums
. The unique elements of an array are the elements that appear exactly once in the array.
Return _the sum of all the unique elements of _nums
.
Example 1:
Input: nums = [1,2,3,2]
Output: 4
Explanation: The unique elements are [1,3], and the sum is 4.
Example 2:
Input: nums = [1,1,1,1,1]
Output: 0
Explanation: There are no unique elements, and the sum is 0.
Example 3:
Input: nums = [1,2,3,4,5]
Output: 15
Explanation: The unique elements are [1,2,3,4,5], and the sum is 15.
Constraints:
1 <= nums.length <= 100
1 <= nums[i] <= 100
题目大意
给你一个整数数组 nums
。数组中唯一元素是那些只出现 恰好一次 的元素。
请你返回 nums
中唯一元素的 和 。
示例 1:
输入: nums = [1,2,3,2]
输出: 4
解释: 唯一元素为 [1,3] ,和为 4 。
示例 2:
输入: nums = [1,1,1,1,1]
输出: 0
解释: 没有唯一元素,和为 0 。
示例 3 :
输入: nums = [1,2,3,4,5]
输出: 15
解释: 唯一元素为 [1,2,3,4,5] ,和为 15 。
提示:
1 <= nums.length <= 100
1 <= nums[i] <= 100
解题思路
题目要求计算数组中只出现一次的元素之和,通过统计每个数字的出现次数,过滤出只出现一次的数字,然后累加即可。
统计频次:
- 使用
Map
数据结构记录数组中每个数字的出现次数。 - 遍历数组,逐一将每个数字的频次存入
Map
中。
- 使用
筛选唯一元素:
- 使用
filter
遍历Map
的键值对,只保留频次为 1 的数字。
- 使用
求和:
- 使用
reduce
将筛选出的数字累加,并返回累加值。
- 使用
复杂度分析
- 时间复杂度:
O(n)
,频次统计,筛选和累加操作分别遍历数组一次。 - 空间复杂度:
O(n)
,使用了Map
存储频次。
代码
/**
* @param {number[]} nums
* @return {number}
*/
var sumOfUnique = function (nums) {
let freq = new Map();
for (let num of nums) {
freq.set(num, (freq.get(num) || 0) + 1); // 更新频次
}
return Array.from(freq)
.filter(([key, count]) => count === 1) // 筛选频次为1的数字
.reduce((acc, [key]) => acc + key, 0); // 累加键值
};