【leetcode】只出现一次的数字【C、Python】

题目:

只出现一次的数字

 

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 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
 
   

猜你喜欢

转载自www.cnblogs.com/peterzone/p/9343796.html