1748. 唯一元素的和 :「排序 + 双指针」&「哈希表」

简介: 1748. 唯一元素的和 :「排序 + 双指针」&「哈希表」

网络异常,图片无法展示
|


题目描述



这是 LeetCode 上的 1748. 唯一元素的和 ,难度为 简单


Tag : 「模拟」、「哈希表」、「双指针」、「排序」


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


排序 + 双指针



根据题意,其中一个做法是先对 nums 进行排序,使用双指针找到值相同的连续段 [i, j)[i,j),若连续段长度为 11,则将该值累加到答案。


代码:


class Solution {
    public int sumOfUnique(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length, ans = 0;
        for (int i = 0; i < n; ) {
            int j = i;
            while (j < n && nums[j] == nums[i]) j++;
            if (j - i == 1) ans += nums[i];
            i = j;
        }
        return ans;
    }
}
复制代码


  • 时间复杂度:排序复杂度为 O(n\log{n})O(nlogn);统计答案复杂度为 O(n)O(n)。整体复杂度为 O(n\log{n})O(nlogn)
  • 空间复杂度:O(\log{n})O(logn)


哈希表



另外容易想到使用「哈希表」统计某个数的出现次数,又根据 nums[i]nums[i] 的范围为 [1, 100][1,100],可直接使用数组充当哈希表。


代码:


class Solution {
    int[] cnt = new int[110];
    public int sumOfUnique(int[] nums) {
        for (int i : nums) cnt[i]++;
        int ans = 0;
        for (int i = 1; i <= 100; i++) {
            if (cnt[i] == 1) ans += i;
        }
        return ans;
    }
}
复制代码


  • 时间复杂度:令 CCnums[i]nums[i] 的值域大小,本题固定为 110110。整体复杂度为 O(n + C)O(n+C)
  • 空间复杂度:O(C)O(C)


最后



这是我们「刷穿 LeetCode」系列文章的第 No.1748 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
|
4月前
|
存储 算法 C语言
通过指针引用数组元素
通过指针引用数组元素
35 0
|
4月前
|
C语言 C++
数组元素的指针
数组元素的指针
22 0
|
4月前
|
算法 C语言
OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)
OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)
|
4月前
|
存储
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
【每日一题Day132】LC23633合并相似的物品 | 哈希表 排序+双指针
46 0
|
4月前
DAY-2 | 哈希表、指针与区间划分:字符种数统计问题
```markdown ## 题干 [牛客网链接](https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50) ## 题解 1. **查表法(哈希表)**:利用数组标记出现过的 ASCII 值小于127的字符,首次出现计数,重复则忽略。 2. **指针与区间划分(回头法)**:遍历字符串,对每个字符检查其前所有字符是否重复,重复则不计数。 ## 方法总结 - 哈希表在去重问题中非常实用,可多做相关练习。 - 使用`continue`时注意避免死循环,确保循环变量会改变。 - 多回顾此类问题以巩固理解。 ```
36 2
|
4月前
|
C语言
在引用数组元素时指针的运算
在引用数组元素时指针的运算
35 0
|
4月前
|
C语言
通过指针引用数组元素
通过指针引用数组元素
26 0
|
4月前
|
存储 C语言
数组元素的指针
数组元素的指针
17 0
|
4月前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
41 0
|
4月前
|
存储 安全 Java
防止数组元素的指针被修改
防止数组元素的指针被修改
38 1