Single Number(leetcode)

来源:互联网 发布:软件授权协议 编辑:程序博客网 时间:2024/06/10 16:26

Single Number

  • Single Number
    • 题目
    • 解决
      • 通过记录出现次数判断
      • 异或


题目

leetcode题目

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?


解决

1. 通过记录出现次数判断

class Solution {public:    int singleNumber(vector<int>& nums) {        int num = nums.size();        unordered_map<int, int> array;        for (int i = 0; i < num; i++) {        // 先将所有数字出现次数初始化为0            array[nums[i]] = 0;        }        for (int i = 0; i < num; i++) {        // 统计数字的出现次数            array[nums[i]]++;        }        for (int i = 0; i < num; i++) {            if (array[nums[i]] == 1) {                return nums[i];            }        }    }};

2. 异或

异或的运算规律是相同为0,不同为1,这样两个相同的数异或得到的结果就是0。
所以我们将数组array中的数全部异或,最后得到的结果一定是出现了一次的数。

class Solution {public:    int singleNumber(vector<int>& nums) {        int result = nums[0];        int num = nums.size();        for (int i = 1; i < num; i++) {            result = result ^ nums[i];        }        return result;    }};
原创粉丝点击