刷题 只出现一次的数字

本文介绍了三种在数组中找出唯一出现的元素的方法:利用异或运算的特性、通过排序后比较相邻元素以及借助哈希表(map)来计数。这些方法各有优劣,适用于不同的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

解法:使用异或,异或性质:异或两个相同的数,数值回到原值

int singleNumber(vector<int>& nums) {

    int singleNum = 0;
    for (int j = 0; j < nums.size(); ++j) {
            singleNum ^= nums[j];
    }
    return singleNum;

    }

解法一:使用sort排序数组,然后判断是否相同

int singleNumber(vector<int>& nums) {

sort(nums.begin(),nums.end());

for (int i = 0; i < nums.size();){

if (nums[i] != nums[i + 1])

{

return nums[i];

}

else{i = i + 2;}}

}

解法二:

int singleNumber(vector<int>& nums) {

map<int, int> ms;

for(int i = 0 ; i < nums.size(); i++)

{

ms[nums[i]]++;

}

for(pair<const int, int> m : ms){

if(m.second != 2)

return m.first;

}

return 0;

}

C++中map提供的是一种键值对容器,里面的数据都是成对出现的:每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值。

   pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值