只出现一次的数字

简介: 只出现一次的数字

 问题内容:

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

示例1:

输入: [2,2,1]

输出: 1

示例2:

输入: [4,1,2,1,2]

输出: 4

方法一:暴力求解法

这是最直观的一种求法,每次取数组中的一个数,通过计数来判断这个数的个数是否为1,有则返回这个元素,无则返回-1。

代码实现:

public static int appearOneNumber1(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            int count = 0;
            int temp = arr[i];
            for (int j = 0; j < arr.length; j++) {
                if (arr[j] == temp){
                    count++;
                }
            }
            if (count == 1){
                return temp;
            }
        }
        return -1;
    }

image.gif

此方法虽然直观,但是代码麻烦,运行时间也相对下面求法长。

方法二:异或求解法

异或的特点是:

1、n ^ n = 0;即两个相同的数字异或是0

2、0 ^ n = n;即0和任何数字进行异或,结果就是那个任何数字。

因此将数组遍历异或,最终的结果就是个数为一的数。

代码实现:

public static int appearOneNumber(int[] arr){
        int temp = 0;
        //此处for循环为增强型for循环
        for (int i : arr) {
            temp ^= i;
        }
        return temp;
    }

image.gif


相关文章
|
7月前
|
算法 前端开发
619. 只出现一次的最大数字
619. 只出现一次的最大数字
73 0
|
2月前
|
BI
求数字
【10月更文挑战第3天】求数字。
40 1
|
1月前
使用数字
【10月更文挑战第25天】使用数字。
20 6
|
1月前
倒三角形数字
【10月更文挑战第25天】倒三角形数字。
28 3
|
5月前
|
容器
只出现一次的数字
只出现一次的数字
28 0
|
7月前
|
存储 算法 C++
c++数字
c++数字
32 1
|
7月前
|
存储 C++ 容器
Acwing.75 和为S的两个数字
Acwing.75 和为S的两个数字
|
7月前
|
算法 C++
只出现一次的数字(C++)
只出现一次的数字(C++)
51 0
137. 只出现一次的数字 II
137. 只出现一次的数字 II
57 0