LeetCode链接: link.
解题思路:
先使用sort()函数对传入数组进行排序,获得一个有序序列
再遍历该序列,如果遍历的点以下各节点为空或者与本节点值不相等,则该节点值只出现一次的数字
否则节点向后移动3步,寻找下一个节点
不要忘记题目中只说了非空,但是并没有说里面是几个元素,如果前面的循环条件压根就不满足,里面只有一个元素的情况也需要考虑到。
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(size_t i = 0;i<nums.size();i += 3)
{
if((i+1) == nums.size() || (nums[i] != nums[i+1]))
{
return nums[i];
}
}
//万一数组为空呢?是不是连循环都进入不了呢。
return nums[nums.size()-1];
}
};