[leetcode 136] Single Number

来源:互联网 发布:白百合离婚 知乎 编辑:程序博客网 时间:2024/06/06 03:34

Question:

Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?


分析:

给定一个整数数组,其中数组内的所有数据元素(除了一个以外)都出现2次,找到这个出现一次的数据;

要求时间复杂度为O(n),空间复杂度为O(1)

可以知道,如果数组为空,返回0;

若不为空,可以采用位异或运算;

异或运算介绍:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)

如果A = 2,B=3 则A^B = 010 ^ 011 = 001;

所以如果从第一个元素开始到最后一个元素采用异或运算,遇到相同的数据元素会中和为0,最后只会剩下出现1次的数据无法被中和为0;


所以代码如下:

class Solution {public:    int singleNumber(vector<int>& nums) {        int res = 0;        for (int n : nums)             res ^= n;        return res;            }};




0 0
原创粉丝点击