栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

力扣每日一题2021-10-30只出现一次的数字III

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣每日一题2021-10-30只出现一次的数字III

只出现一次的数字III
  • 260.只出现一次的数字III
    • 题目描述
    • 思路:哈希表、异或运算+分治
      • 哈希表
        • Java实现
        • Python实现
      • 异或运算+分治
        • Java实现
        • Python实现


260.只出现一次的数字III 题目描述

只出现一次的数字III


思路:哈希表、异或运算+分治 哈希表

使用哈希表统计数组中每个元素出现的次数。统计完成后,对哈希表进行遍历,找到所有只出现一次的数放入答案中。

Java实现

class Solution {
    public int[] singleNumber(int[] nums) {
        Map counter = new HashMap();
        for (int num : nums) {
            counter.put(num, counter.getOrDefault(num, 0) + 1);
        }
        int[] ans = new int[2];
        int index = 0;
        for (Map.Entry entry : counter.entrySet()) {
            if (entry.getValue() == 1) {
                ans[index++] = entry.getKey();
            }
        }
        return ans;
    }
}
Python实现

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        # 哈希表
        counter = Counter(nums)
        return [num for num, val in counter.items() if val == 1]
异或运算+分治

异或有如下两条性质:

  • 0 a = a 0^a = a 0a=a
  • a a = 0 a^a = 0 aa=0
    因为除了要求的答案以外的元素均出现两次,可以先对nums中所有元素执行异或操作,得到diff,diff为两答案的异或值(diff必然不为0)。分组重新异或,即可得到答案。
Java实现

class Solution {
    public int[] singleNumber(int[] nums) {
        // 异或
        int diff = 0;
        for(int num: nums)
            diff ^= num;
        diff = diff & (~diff+1);
        int ans1 = 0, ans2 = 0;
        for(int num: nums){
            if((num & diff) > 0)
                ans1 ^= num;
            else
                ans2 ^= num;
        }
        return new int[]{ans1, ans2};
    }
}
Python实现

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        # 异或运算
        ans = 0
        for num in nums:
            ans ^= num
        ans &= -ans
        ans1 = ans2 = 0
        for num in nums:
            if num & ans:
                ans1 ^= num
            else:
                ans2 ^= num
        return [ans1, ans2]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/358027.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号