题目描述
给你一个整数数组 nums
。数组中唯一元素是那些只出现 恰好一次 的元素。
请你返回 nums
中唯一元素的 和 。
示例 1:
输入:nums = [1,2,3,2] 输出:4 解释:唯一元素为 [1,3] ,和为 4 。
示例 2:
输入:nums = [1,1,1,1,1] 输出:0 解释:没有唯一元素,和为 0 。
示例 3 :
输入:nums = [1,2,3,4,5] 输出:15 解释:唯一元素为 [1,2,3,4,5] ,和为 15 。
提示:
-
1 <= nums.length <= 100
-
1 <= nums[i] <= 100
思路:
这道题主要是考察对哈希数组的简单运用,注意这里的所给数组范围为1到100之间,并且都是整数,那么我们是不是可以定义一个大小为101的数组,数组的下标代表这个数,而这个元素的值则代表这个数出现的次数,然后再把每个数组元素值等于1的相加,那么就可以求所给值了
int sumOfUnique(int* nums, int numsSize) {
int a[101]={0};
int i,sum=0;
for(i=0;n<numSize;i++) //a[nums[i]] 代表的是nums[i]出现的次数
a[nums[i]]++; //这里的nums[i]代表的是这个数在a中代表的下标(其实和a的下标是同一个数)
for(i=0;i<numSize;i++)
if(a[nums[i]]==1)
sum+=nums[i];
return sum;
}
上面这个函数的nums和numsSize代表的是对应所给数组和数组的大小,要返回的则是恰好出现一次的元素的和
注意:
第二次的for循环是把nums的元素循环了一遍,而不是a数组的元素,原因在于nums的长度在1到100之间,相较于a的100个元素可以很好减少循环次数(如果长度大于100用a数组的循环好一些),但是注意这里要求的是唯一元素,所以sum直接相加,如果是求为二甚至更多,记得不要忘记一些重复的元素相加(可以用a的循环)