这个题目动了点脑筋,由于它们时无序的,所以我们如果去找的话比较费劲,可能要循环嵌套再嵌套,所以我们先利用库中自带的sort函数进行排序,把这些数从小到大以此排列,然后我们进行判断哪个数出现了一次即可。这里只要注意会有只有一个元素的vector要单另出来进行判断。还有再vector末尾的元素也要单另出来进行判断。此外我们进行普遍操作即可。如果一个数只出现一次,那么该数的前一个数和后一个数都应该与其不同。具体代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
//如果只有一个成员,那么我们直接返回第一个
if(nums.size()==1)
{
return num
s[0];
}
//对vector进行排序
sort(nums.begin(), nums.end());
auto it = nums.begin();
//进行遍历,这里要注意两个重复出现的数字的边界。
//排序之后首尾注意一下即可。
if(*it!=*(it+1))
{
return *it;
}
while (it != nums.end())
{
if (*it != *(it + 1))
{
if (it+2==nums.end()||*(it+2) != *(it + 1))//end是指向末尾字符的下一个
{
it++;
break;
}
}
it++;
}
return *(it);
}
};