题目:
只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
C语言解答:
思路:验证是否重复,显然不能向前查找。因为我们的目标是找出哪个不重复的值,当该值在数组的最后一个时,向前查找就无法验证它是否重复。
1 int singleNumber(int* nums, int numsSize) { 2 int i,j,k; 3 4 for(i=0;i<numsSize;i++) 5 { 6 k=0; 7 for(j=0;j<numsSize;j++) 8 { 9 if(j!=i&&nums[i]==nums[j]) k=1; 10 11 } 12 if(k!=1) return nums[i]; 13 } 14 return 0; 15 16 }
Python解答:
思路:使用collections模块counter函数,统计各元素出现的次数并返回一个键值对字典,再对字典进行遍历,选出其中出现次数小于2的元素。
1 class Solution: 2 def singleNumber(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: int 6 """ 7 dic=collections.Counter(nums) 8 for (key,value) in dic.items(): 9 if value<2: 10 return key