[LeetCode1748. 唯一元素的和] | 刷题打卡

472 阅读1分钟
  • 掘金团队号上线,助你 Offer 临门! 点击 查看活动详情

本题核心

3个姐法,三倍的快乐~(^▽^)

题目描述

给你一个整数数组 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 桶/固定长度数组

一眼看到输入数组长度为固定1~100,那么我首先想到的是桶来解决这个问题。即通过101个桶,循环遍历nums,往桶里自增,最后循环把桶里面等于1,也就是出现一次的元素累计得出结果。

姐法2 HashMap

单次循环,利用HashMap的数据结构特性来统计只出现一次的问题。当nums中的数不在HashMap中时,往里put数据,并累加到count上,如果nums在HashMap中,则用count再减去该数值。最后单次循环的结果count就是只出现过一次的元素的总和。

姐法3 双循环

双循环比对每一个元素与数组中另一个元素是否相同,如果相同,跳出循环。如果比对完所有元素依然不同则只出现过一次,进行累加。

解题代码

姐法1

public int sumOfUnique(int[] nums) {
        int count = 0;
        int[] buckets = new int[101];
        for (int num : nums) {
            buckets[num] = buckets[num] + 1;//把nums有的元素装进buckets数组里
        }
        for (int i = 0; i < buckets.length; i++) {
            if (buckets[i] == 1) {//只把数组为值为1的下标元素累加起来
                count += i;
            }
        }
        return count;
    }

姐法2

public int sumOfUnique(int[] nums) {
        if (nums.length == 1) {
            return nums[0];
        }
        HashMap<Integer, Integer> map = new HashMap<>();
        int count = 0;
        for (int num : nums) {
            Integer value = map.get(num);
            if (value == null) {//
                count += num;
                map.put(num, 1);
            } else if (value > 0) {
                count -= num;
                map.put(num, 0);
            }
        }
        return count;
    }

姐法3

public int sumOfUnique(int[] nums) {
        int n = nums.length;
        if (n == 1) {
            return nums[0];
        }
        int res = 0;
        for (int i = 0; i < n; i++) {
            boolean dup = false;
            for (int j = 0; j < n; j++) {
                if (i != j && nums[i] == nums[j]) {
                    dup = true;
                    break;
                }
            }
            if (!dup) {
                res += nums[i];
            }
        }
        return res;
    }

WX20210412-102613@2x.png ##总结

每多思考一种姐法,你就多一种姐法的快乐。~骑士君,ヾ(◍°∇°◍)ノ゙加油啊