给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
python实现代码:
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
for i in range(0,len(nums)-1, 2):
if nums[i] != nums[i+1]:
return nums[i]
return nums[len(nums)-1]
if __name__ == '__main__':
test_case = [4,1,2,1,2]
my_solution = Solution()
print(my_solution.singleNumber(test_case))
C实现代码:
#include <stdio.h>
// a^0 = a, a^0 = a, a^b^a = b
// e.g. [001, 010, 001]
// 001 ^ 010 ^ 001 = 010
int singleNumber(int* nums, int numsSize) {
int ret = 0;
for (int i = 0; i < numsSize; i++) {
ret = ret ^ nums[i];
}
return ret;
}
int main()
{
int test_case[5] = {4,1,2,1,2};
int result = singleNumber(test_case, 5);
printf("%d\n", result);
return 0;
}