这道题的思路如下:
首先对该数组进行排序,只有一个元素是出现过一次,其他均为两次。
所以,对其排序之后,即以下这个状态:
如果出现过两次,那么在数组的循环累加两个之后,那么一定会和它后面的那一个想等。如果出现了与后面一个值不相等的话,即为落单的一个值。
如果数组累加到倒数第三位和第二位,仍未找到落单,那么落单值为最后一位(数组长度一定是奇数个)
代码实现如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
//找到不相等的一组直接返回落单的值
sort(nums.begin(),nums.end());
for(int i = 0 ; i < nums.size() - 1;i += 2)
{
if(nums[i] != nums[i + 1])
return nums[i];
}
//如果到最后一组也未找到,那么排序后的最后一位数字一定为落单的一位
return nums[nums.size() - 1];
}
};