[leetcode][bit] Single Number

来源:互联网 发布:10年总决赛第七场数据 编辑:程序博客网 时间:2024/05/21 06:24

题目:

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?

方法一:哈希。时间复杂度O(n),空间复杂度O(n)

class Solution {public://方法一:哈希。在哈希表中没找到一样的,插入;找到了一样的,删除。//时间复杂度O(n),空间复杂度O(n)    int singleNumber(vector<int>& nums) {        if(nums.empty()) return 0;        set<int> hashTable;        for(int i = 0; i < nums.size(); ++i){            set<int>::iterator iter = hashTable.find(nums[i]);            if(iter != hashTable.end()) hashTable.erase(iter);//找到了,删除            else hashTable.insert(nums[i]);//没找到,插入        }        return *(hashTable.begin());//返回hashTable中剩余的唯一一个元素    }};


方法二:异或。时间复杂度O(n),空间复杂度O(1)

class Solution {public:    int singleNumber(vector<int>& nums) {        if(nums.empty()) return 0;        int res = nums[0];        for(int i = 1; i < nums.size(); ++i){            res ^= nums[i];        }        return res;    }};


0 0
原创粉丝点击