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

可视化网站开发工具网站策划方案书

可视化网站开发工具,网站策划方案书,如何做阅读网站,商丘网站建设推广渠道1. 两个数字出现一次,其余数字出现两次。O(n)O(1)。 找一个不同点,将所有数字分为两类。其中,两个只出现一次的数字各出现在一个集合当中。 如何找最后一个不同点?我们知道,如果两个数字不同的话,那么&am…

1. 两个数字出现一次,其余数字出现两次。O(n)+O(1)。

找一个不同点,将所有数字分为两类。其中,两个只出现一次的数字各出现在一个集合当中。

如何找最后一个不同点?我们知道,如果两个数字不同的话,那么,在二进制表示下,他们一定有一个二进制位是不同的,其中一个为 0 0 0,一个为 1 1 1。通过对所有数字求异或和,就可以得到 a a a ^ b b b,然后枚举一下,任意找一个不同点即可!

class Solution {
public:vector<int> singleNumbers(vector<int>& nums) {int xors = 0;  for(auto &x : nums) xors ^= x;int diff = 0; // 二进制表示中第一个不同点for(int i = 0; i < 32; i ++ ) {if(xors >> i & 1) {diff = i;break;}}int r1 = 0, r2 = 0;for(auto &x : nums) {if(x >> diff & 1)   r1 ^= x;else    r2 ^= x;}return {r1, r2};}
};

2. 一个数字出现了一次,其余都出现了三次

我们首先从暴力的角度出发,我们可以枚举每个 bit 位置 1 的数量,如果该 bit 位置 1 出现了 3 次,就消为 0,这可以通过对 3 取模实现。时间复杂度是 O ( 32 N ) O(32N) O(32N)

class Solution {
public:int trainingPlan(vector<int>& actions) {int res = 0;for(int i = 0; i < 32; i ++ ) {int cnt = 0;for(auto &x : actions)  cnt += x >> i & 1;cnt %= 3;res += cnt << i;}return res;}
};

那么,我们有没有办法不枚举每个 bit 位置,而是一次性直接对数字的所有 bit 位置进行位运算,将时间复杂度优化到 O ( N ) O(N) O(N) 呢?

试想一下,我们可以设计一种逻辑运算,当某个 bit 位置的 1 出现 3 次时,该逻辑运算的结果是 0,其他情况下为 1,这样我们对所有数字进行该逻辑运算,得到的结果就是那个只出现一次的数字。

在这里我们可以定义两个变量 onestwos,分别记录 bit 位 1 出现一次的位和 1 出现两次的位。注意在这里我们无需记录 1 出现了三次的 bit 位,因此在我们的逻辑运算中,出现了三次的 bit 位会计算为 0,也即出现 0 次。由于 0 比较特殊,这里我们无需显示额外记录。那么最后 ones 即为我们想要的答案。

例如,ones=10=1010B。其中,bit 位置为 1 和 4 的位为 1,表示这两个 bit 位 1 出现的次数为 1。

另外,bit 位置为 0 和 3 的位为 1,表示这两个 bit 为 1 出现的次数为 0,它包含在 ones 中隐式表示了。

为了得到这种逻辑运算,我们可以运用数字电路中的卡诺图,一种用于简化布尔表达式的方法,它可以帮助我们直观地找出最简逻辑表达式。

通过上面的分析,这里有三种状态:[0, 1, 2],分别表示 bit 位中 1 出现的次数为 0 次,1次,2次。我们用 ones 表示 1,twos 表示 2,0 隐式表示。

我们可以将 onestwos 分别视为两个二进制位的低位和高位,在接受一个新数字时,我们就可以得到 onestwos 的卡诺图。

# AB分别表示twos、ones
# AB为11的结果是无意义的,用x表示
# 10在接受输入1之后变成00,表示出现3次1的bit为又化为0了# A 的卡诺图
AB\C |  0  |  1
=================00 |  0  |  001 |  0  |  1        ====> 得到 A = BC + AC'11 |  x  |  x10 |  1  |  0# B 的卡诺图
AB\C |  0  |  1
=================00 |  0  |  101 |  1  |  0        ====> 得到 B = BC' + A'B'C11 |  x  |  x10 |  0  |  0
class Solution {
public:int trainingPlan(vector<int>& nums) {int A = 0, B = 0;for (auto &C : nums) {int preA = A;A = (B & C) | (A & ~C);B = (B & ~C) | (~preA & ~B & C);}return B;}
};
http://www.dtcms.com/wzjs/107551.html

相关文章:

  • 500强中国企业名单抖音关键词优化排名靠前
  • 兰州网站开发哪里可以做公司网站优化方案
  • 武汉制作网站的公司地址app运营需要做哪些
  • 建设联结是不是正规网站营销新闻
  • 珠海网站建设王道下拉惠seo网络营销课程
  • wordpress走阿里云OSS内网seo代码优化步骤
  • 英文网站建如何制作网站链接
  • 有人做家具网站中介吗教育培训网页设计
  • 一流高职院校建设网站外包公司
  • 正规网站建设官网百度网站入口链接
  • 网站创建app苏州网站seo优化
  • 地图如果插入网站竞价外包运营
  • 禅城做网站百度上海推广优化公司
  • 上海黑马网站制作百度推广开户怎么开
  • 长春制作手机网站宁波seo关键词优化
  • 做外贸有哪些好的网站有哪些内容友情链接属于免费推广吗
  • 做剧情网站侵权吗信息流优化师面试常见问题
  • 安吉哪里做网站好google官网注册账号入口
  • 柳州做网站有kv网站要怎么创建
  • 北京电商网站开发公司搜索引擎营销的方法不包括
  • 哪些网站是做快消品的网络宣传推广方案
  • 昆明做商城网站多少钱怎么注册网站免费的
  • 营销网站seo推广费用杭州网络推广有限公司
  • 合肥网站建设公司还有不北京昨天出啥大事了
  • 个人网站备案地址香港疫情最新消息
  • wordpress文章页添加摘要合肥优化推广公司
  • 广西柳州网站建设公司郑州网络营销公司哪个好
  • 深圳商城网站设计电话广东宣布即时优化调整
  • 建设代练网站上海aso苹果关键词优化
  • 一级a做爰片免费网站 新闻网上引流推广怎么做