题解 | 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;
    }
}
全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
吃不饱的肱二头肌很想退休:tnnd 我以为选妹子呢,亏我兴高采烈的冲进来😠
投递快手等公司10个岗位
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务