Leetcode Tencent 50 Task7 136. Single Number
描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
1 | 输入: [2,2,1] |
示例 2:
1 | 输入: [4,1,2,1,2] |
来源:力扣(LeetCode)
链接:136. Single Number
解题思路
本题依然是考察位运算,如果没有这个提示,很容易想到用一个map<key,value>来求解,其中key为数组当中出现过的去重元素,value是对应元素出现过的次数,这样遍历一遍数组就可以求得这个map,然后找出value为1的那一个键值对,返回key。这个方法倒是能够在O(N)的时间复杂度内求解问题,但是需要开辟额外的空间。为了满足题意,显然还有更优雅的实现。
最近正好在看**《深入理解计算机系统》**,2.1.7节 C语言中的位级运算 提到任何一位向量,都有。本题当中除了只出现过一次的元素,其它元素都出现两次,那么将数组遍历,然后让他们两两异或,最后剩下的就是那个只出现过一次的元素。
代码
1 | int singleNumber(int* nums, int numsSize) |