Skip to content

Latest commit

 

History

History
200 lines (159 loc) · 3.99 KB

File metadata and controls

200 lines (159 loc) · 3.99 KB

English Version

题目描述

给你一个整数数组 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,累加元素,并使用哈希表记录数字出现的次数。
    • 当数字二次出现时,从累加中删减,二次以上则无视。

Python3

class Solution:
    def sumOfUnique(self, nums: List[int]) -> int:
        counter = Counter(nums)
        return sum(num for num, cnt in counter.items() if cnt == 1)

Java

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;
    }
}

C++

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;
    }
};

Go

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
}

TypeScript

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;
}

Rust

  • 计数
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
    }
}

...