comments | difficulty | edit_url | rating | source | tags | |||
---|---|---|---|---|---|---|---|---|
true |
简单 |
1228 |
第 45 场双周赛 Q1 |
|
给你一个整数数组 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
我们可以用数组或哈希表 cnt
统计数组 nums
中每个数字出现的次数,然后遍历 cnt
,对于出现次数为 1 的数字,将其加入答案。
遍历结束后,返回答案即可。
时间复杂度 nums
的长度和 nums
中的最大值。
class Solution:
def sumOfUnique(self, nums: List[int]) -> int:
cnt = Counter(nums)
return sum(x for x, v in cnt.items() if v == 1)
class Solution {
public int sumOfUnique(int[] nums) {
int[] cnt = new int[101];
for (int x : nums) {
++cnt[x];
}
int ans = 0;
for (int x = 0; x < 101; ++x) {
if (cnt[x] == 1) {
ans += x;
}
}
return ans;
}
}
class Solution {
public:
int sumOfUnique(vector<int>& nums) {
int cnt[101]{};
for (int& x : nums) {
++cnt[x];
}
int ans = 0;
for (int x = 0; x < 101; ++x) {
if (cnt[x] == 1) {
ans += x;
}
}
return ans;
}
};
func sumOfUnique(nums []int) (ans int) {
cnt := [101]int{}
for _, x := range nums {
cnt[x]++
}
for x := 0; x < 101; x++ {
if cnt[x] == 1 {
ans += x
}
}
return
}
function sumOfUnique(nums: number[]): number {
const cnt = new Array(101).fill(0);
for (const x of nums) {
++cnt[x];
}
let ans = 0;
for (let x = 0; x < 101; ++x) {
if (cnt[x] == 1) {
ans += x;
}
}
return ans;
}
impl Solution {
pub fn sum_of_unique(nums: Vec<i32>) -> i32 {
let mut cnt = [0; 101];
for x in nums {
cnt[x as usize] += 1;
}
let mut ans = 0;
for x in 1..101 {
if cnt[x] == 1 {
ans += x;
}
}
ans as i32
}
}
class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function sumOfUnique($nums) {
$sum = 0;
for ($i = 0; $i < count($nums); $i++) {
$hashtable[$nums[$i]] += 1;
if ($hashtable[$nums[$i]] == 1) {
$sum += $nums[$i];
}
if ($hashtable[$nums[$i]] == 2) {
$sum -= $nums[$i];
}
}
return $sum;
}
}
class Solution {
public int sumOfUnique(int[] nums) {
int ans = 0;
int[] cnt = new int[101];
for (int x : nums) {
if (++cnt[x] == 1) {
ans += x;
} else if (cnt[x] == 2) {
ans -= x;
}
}
return ans;
}
}
class Solution {
public:
int sumOfUnique(vector<int>& nums) {
int ans = 0;
int cnt[101]{};
for (int& x : nums) {
if (++cnt[x] == 1) {
ans += x;
} else if (cnt[x] == 2) {
ans -= x;
}
}
return ans;
}
};
func sumOfUnique(nums []int) (ans int) {
cnt := [101]int{}
for _, x := range nums {
cnt[x]++
if cnt[x] == 1 {
ans += x
} else if cnt[x] == 2 {
ans -= x
}
}
return
}
function sumOfUnique(nums: number[]): number {
let ans = 0;
const cnt = new Array(101).fill(0);
for (const x of nums) {
if (++cnt[x] === 1) {
ans += x;
} else if (cnt[x] === 2) {
ans -= x;
}
}
return ans;
}
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
}
}