给你一个整数数组 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
- 计数
- 定义一个计数器 counter,存放数组每个元素出现的次数。
- 然后遍历 counter 中每个元素,累加次数为 1 的所有下标即可。
- 哈希表
- 遍历
nums
,累加元素,并使用哈希表记录数字出现的次数。 - 当数字二次出现时,从累加中删减,二次以上则无视。
- 遍历
class Solution:
def sumOfUnique(self, nums: List[int]) -> int:
counter = Counter(nums)
return sum(num for num, cnt in counter.items() if cnt == 1)
class Solution {
public int sumOfUnique(int[] nums) {
int[] counter = new int[101];
for (int num : nums) {
++counter[num];
}
int ans = 0;
for (int i = 0; i < 101; ++i) {
if (counter[i] == 1) {
ans += i;
}
}
return ans;
}
}
class Solution {
public:
int sumOfUnique(vector<int>& nums) {
vector<int> counter(101);
for (int num : nums) ++counter[num];
int ans = 0;
for (int i = 0; i < 101; ++i)
if (counter[i] == 1)
ans += i;
return ans;
}
};
func sumOfUnique(nums []int) int {
counter := make([]int, 101)
for _, num := range nums {
counter[num]++
}
ans := 0
for i := 0; i < 101; i++ {
if counter[i] == 1 {
ans += i
}
}
return ans
}
function sumOfUnique(nums: number[]): number {
let res = 0;
const map = new Map();
for (const num of nums) {
if (map.has(num)) {
if (map.get(num)) {
map.set(num, false);
res -= num;
}
} else {
map.set(num, true);
res += num;
}
}
return res;
}
- 计数
impl Solution {
pub fn sum_of_unique(nums: Vec<i32>) -> i32 {
let mut arr = [0; 101];
for num in nums {
arr[num as usize] += 1;
}
let mut res = 0;
for i in 1..101 {
if arr[i] == 1 {
res += i;
}
}
res as i32
}
}
- 哈希表
use std::collections::HashMap;
impl Solution {
pub fn sum_of_unique(nums: Vec<i32>) -> i32 {
let mut res = 0;
let mut map = HashMap::new();
for num in nums {
if map.contains_key(&num) {
if *map.get(&num).unwrap() {
map.insert(num, false);
res -= num;
}
} else {
map.insert(num, true);
res += num;
}
}
res
}
}