当前位置: 首页 > news >正文

只出现一次的数字|||(考察点为位操作符)

目录

一题目:

二·思路汇总:

三·代码解答:


一题目:

leetcode原题链接:. - 力扣(LeetCode) 

二·思路汇总:

思路:如果直接对数组按位异或,那么最后得到的是a^b,因此要把它们分到不同的数组,再按位异或。可想而知a与b不同的话

那么要么至少有一位不同,则按位异或后至少有一个一,因此可以用lowbit得到它的从末端数第一个一的位,其余都是0

如:000010000,,可以知道a与b只有一个数与它按位与后为整数,否则为0.因此可以区分不同数组按位异或。

这里操作的都是补码,如ret最后存在1的位(即a与b不同的比特位被它包含)

可以是11或者10,01,那么对应的负ret操作时候是补码就是:01,10,11,此时如果&得到的bite位一定是lowbit,其余都是0

因此这个-ret可以保证对应的ret除了最后一位是1则-ret此处也是1,其他相反

三·代码解答:

class Solution {
public:vector<int> singleNumber(vector<int>& nums) {unsigned int ret=0;int a=0,b=0;for(auto i:nums)ret^=i;int x=ret&(~ret+1);//得到lowbit两种写法//int x=ret&(-ret);for(int j=0;j<nums.size();j++){if(nums[j]&x)a^=nums[j];else b^=nums[j];}return {a,b};}
};


http://www.mrgr.cn/news/41197.html

相关文章:

  • 遗传算法与深度学习实战(15)——差分进化详解与实现
  • 仅需10G显存,使用 Unsloth 微调 Qwen2 并使用 Ollama 推理
  • RAC被修改权限及相关问题
  • Prometheus监控MySQL主从数据库
  • linux 端口 进程
  • LC记录二:丑数专题,一文秒解丑数3题
  • 操作符详解与表达式求值
  • java OOP基础:类与对象(万字长文)
  • 什么是基尼指数
  • SpringBoot与校园健康信息管理的融合
  • wordpress源码资源站整站打包32GB数据,含6.7W条资源数据
  • 解决方案:机器学习中,出现欠拟合和过拟合,这两种情况分别如何解决
  • 笔记整理—linux进程部分(6)进程间通信、alarm和pause
  • fiddler抓包15_AutoResponder自动重定向 - 篡改响应
  • 再探电子病历系统,3D影像可视化融入,该如何设计?
  • ✨Java并发编程:Synchronized与ReentrantLock的比较
  • 区块链技术的应用场景和优势
  • 4M-21: An Any-to-Any Vision Model for Tens of Tasks and Modalities论文精度
  • 数字经济与新质生产力:地理信息与遥感视角下的深度分析
  • 在职场,没人告诉你的人情世故