//暴力破解
class Solution
{
public:
int singleNumber(vector<int> &nums)
{
int len = nums.size(), result;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
//依次让每个数与数组的各个数进行比较
if (nums[i] == nums[j] && (i != j))
{
//出现相等则直接进行下一个数与数组的各个数的比较
break;
}
//直到最后一个数与数组的其他数都不相等
if (j == len - 1)
{
//比较的这个数就是只出现一次的数字
result = nums[i];
}
}
}
return result;
}
};
//哈希映射
class Solution
{
public:
int singleNumber(vector<int> &nums)
{
int result = 0;
unordered_map<int, int> us;
//遍历数组,获取每一个元素的value值
for (auto num : nums)
{
++us[num];
}
//遍历哈希集合映射
for (auto [num, count] : us)
{
//找到只出现一次的元素
if (count == 1)
{
result = num;
break;
}
}
return result;
}
};
//先排序后遍历查找
class Solution
{
public:
int singleNumber(vector<int> &nums)
{
//获取数组的长度
int len = nums.size();
//对数组进行排序
sort(nums.begin(), nums.end());
//遍历数组:如果相邻两个元素相等,则向前三位
for (int i = 0; i < len; i += 3)
{
//当遍历到最后一个元素或者出现相邻的元素不相等
if (i == len - 1 || nums[i] != nums[i + 1])
{
//即找到只出现一次的数字
return nums[i];
}
}
//不存在唯一的数字则返回0
return 0;
}
};