LeetCode:136.只出现一次的数字(Java语言)

简介: LeetCode:136.只出现一次的数字(Java语言)

136.只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

解题思路:

方法1:利用位运算符比较强大

利用异或运算

性质(1):0与任何数异或都得另外的那个数

性质(2):1异或任何数=任何数取反

性质(3):满足交换律和结合律

1 xor 2 xor 3 xor 2 = (1 xor 1) xor (2 xor 2) xor 3 = 0 xor 0 xor 3 = 0 xor 3 = 3

性质(4):判断两个数是否相等可以用a异或b==0

性质(5):交换两个数可以

a=a异或b

b=b异或a

a=a异或b

方法2:

因为每个元素最多出现两次,可以利用set特性

当添加重复元素时,第二次会添加失败,说明set中已有相同元素,所以调用方法删除它

最后利用迭代器返回集合中第一个即为答案

代码:

方法1:

/**
 *作者:魏宝航
 *2020年11月25日,上午8:51
 */
class Solution {
    public int singleNumber(int[] nums) {
        int res=0;
        for(int i:nums){
            res^=i;
        }
        return res;
    }
}

方法2:

/**
 *作者:魏宝航
 *2020年11月25日,上午8:34
 */
class Solution {
    public int singleNumber(int[] nums) {
        Set<Integer> set=new HashSet<>();
        for(int i:nums){
            if(set.add(i)){
            }
            else{
                set.remove(i);
            }
        }
        return set.iterator().next();
    }
}

执行结果:


目录
相关文章
|
3天前
|
IDE Java Unix
Java语言开发环境配置详解
Java语言开发环境配置详解
|
3天前
|
安全 Java Unix
Java语言中的日期与时间处理技术
Java语言中的日期与时间处理技术
|
3天前
|
XML JSON 监控
Java语言中的正则表达式技术详解
Java语言中的正则表达式技术详解
|
3天前
|
安全 Java API
Java语言的特点及其应用深度解析
Java语言的特点及其应用深度解析
10 1
|
3天前
|
安全 Java 编译器
深入理解Java语言中的方法重载(Overloading)
深入理解Java语言中的方法重载(Overloading)
|
3天前
|
Java 程序员 API
Java语言注释的深入解析与应用
Java语言注释的深入解析与应用
|
3天前
|
存储 算法 搜索推荐
Java语言中的数组技术详解
Java语言中的数组技术详解
|
3天前
|
存储 Java
深入探索Java语言中的方法
深入探索Java语言中的方法
|
3天前
|
Java
Java语言中的继承:深入解析与应用
Java语言中的继承:深入解析与应用
|
3天前
|
Java
Java语言中的多态性:深入解析与应用
Java语言中的多态性:深入解析与应用