题解 | LC15#出现一次的数字#

出现一次的数字

https://www.nowcoder.com/practice/0bc646909e474ac5b031ec6836a47768

Step 1 题解

Step 1-1 描述

现在有一个整数类型的数组,数组中素只有一个元素只出现一次,其余的元素都出现两次。

Step 1-2 注意

你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?

1-2-1 线性时间复杂度

如果一个算法的时间复杂度为O(n),则称这个算法具有线性时间,或O(n)时间。非正式地说,这意味着对于足够大的输入,运行时间增加的大小与输入成线性关系
例如,一个计算列表所有元素的和的程序,需要的时间与列表的长度成正比。

Step 2 解题(JAVA)

考虑到
  1. 只有一个元素只出现一次其余的元素都出现两次
  2. 线性时间复杂度
  3. 不使用额外内存空间
所以设计的算法需要线性处理只有一个出现一次的数字
那有没有一个可以抵消掉复现数字的算法呢?
没错,那就是相同取0,相异取1异或运算
异或运算
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
import java.util.*;


public class Solution {
    /**
     * 
     * @param A int整型一维数组 
     * @return int整型
     */
    public int singleNumber (int[] A) {
        // write code here
        int result = 0;
        int n=A.length;//length() 方法用于返回字符串的长度,空字符串的长度返回 0。

        for (int i = 0; i < n; ++i) {
            result ^= A[i];
        }
        return result;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务