给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
输入:nums = [2,2,1]
输出:1
示例 2 :
输入:nums = [4,1,2,1,2]
输出:4
示例 3 :
输入:nums = [1]
输出:1
提示:
1 <= nums.length <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
- 除了某个元素只出现一次以外,其余每个元素均出现两次。
思路:
-
初始化:
-
创建一个空的字典
dic
,用于记录每个数字的出现次数。 -
初始化一个变量
ans
,用于存储只出现一次的数字。
-
-
统计数字出现次数:
-
遍历数组
nums
,对于每个数字:-
如果数字已经在字典中,将其对应的值加1。
-
如果数字不在字典中,将其添加到字典中,并设置值为1。
-
-
-
查找只出现一次的数字:
-
遍历字典中的每个键值对:
-
如果某个键的值为1,将该键赋值给
ans
。
-
-
-
返回结果:
-
返回变量
ans
,即为只出现一次的数字。
-
代码:C#
public class Solution {
public int SingleNumber(int[] nums) {
int m=nums.Length;
int ans=0;
Dictionary<int,int> dic=new Dictionary<int,int>();
for(int i=0;i<m;i++)
{
if(dic.ContainsKey(nums[i]))
{
dic[nums[i]]++;
}
else
{
dic[nums[i]]=1;
}
}
foreach(var k in dic)
{
if(k.Value==1)
ans=k.Key;
}
return ans;
}
}