[路飞]_leetcode 1748. 唯一元素的和

204 阅读1分钟

「这是我参与2022首次更文挑战的第21,活动详情查看:2022首次更文挑战

1748. 唯一元素的和

给你一个整数数组 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

分析

首先我们从提示中的1 <= nums.length <= 1001 <= nums[i] <= 100来数据量非常的少。

我只需要找出所有的唯一值并相加即可,实现方法有很多种我们简单的实现其中3种方式吧。

1.逐步实现 暴力破解

定义变量ans用存放唯一元素的和,初始值为0

let ans = 0

通过俩层循环进行排序哪些值是出现一次的。在第一层循环中定义变量n用于统计当前元素存在次数。当第一层与第二层循环一样时n++,当第二层循环完毕时判断n是否等于1,如果等于1的话就加入ans中。

for(let i = 0; i<nums.length; i++){
    let n = 0
    for(let j = 0; j<nums.length; j++){
        if(nums[i] === nums[j]){
            n++
        }
    }
    if(n === 1){
        ans = ans+nums[i]
    }
}

1.完整代码 暴力破解

/**
 * @param {number[]} nums
 * @return {number}
 */
var sumOfUnique = function(nums) {
   let ans = 0
   for(let i = 0; i<nums.length; i++){
       let n = 0
       for(let j = 0; j<nums.length; j++){
            if(nums[i] === nums[j]){
                n++
            }
        }
        if(n === 1){
            ans = ans+nums[i]
        }
   }
   return ans
};

1.逐步实现 暴力破解一行代码

首先通过俩次filter就能得到唯一元素的集合并通过reduce将得到的集合进行相加即可等到最终答案

for(let i = 0; i<nums.length; i++){
    let n = 0
    for(let j = 0; j<nums.length; j++){
        if(nums[i] === nums[j]){
            n++
        }
    }
    if(n === 1){
        ans = ans+nums[i]
    }
}

2.完整代码 暴力破解一行代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var sumOfUnique = function(nums) {
   return nums.filter(i=>nums.filter(j=>i==j).length == 1).reduce((a,b)=>a+b, 0)
};

3.逐步实现 map映射

定义变量ans用存放唯一元素的和,初始值为0

let ans = 0

定义变量map用存元素与出现次数的关系

const map = new Map();

遍历nums,并判断当前元素是否出现过,如果没有的话就将此元素存入map中赋值为1并先将此值加入ans中,如果当前元素出现过1此时就将此值从ans中减去并时map中此元素出现次数加1

/**
 * @param {number[]} nums
 * @return {number}
 */
var sumOfUnique = function(nums) {
    let ans = 0;
    const map = new Map();
    for (const num of nums) {
        if (!map.get(num)) {
            ans = ans + num;
            map.set(num, 1);
        } else if (map.get(num) > 0) {
            ans = ans - num;
            map.set(num, map.get(num) + 1);
        }
    }
    return ans;
};

3.完整代码 map映射

/**
 * @param {number[]} nums
 * @return {number}
 */
var sumOfUnique = function(nums) {
    let ans = 0;
    const map = new Map();
    for (const num of nums) {
        if (!map.get(num)) {
            ans = ans + num;
            map.set(num, 1);
        } else if (map.get(num) === 1) {
            ans = ans - num;
            map.set(num,map.get(num) + 1);
        }
    }
    return ans;
};