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

计算机网络技术是干嘛的网站在线优化

计算机网络技术是干嘛的,网站在线优化,怎么免费创建网页,网站开发软硬件配置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/a/563065.html

相关文章:

  • 一个人网站运营怎么做网站后台统计代码
  • jsp网站开发 孟浩pdf简单又快的科学小制作
  • 国际网站怎么建设微商城开发用华网天下北京
  • 常用博客建站程序搜索引擎优化关键词选择的方法有哪些
  • 网站未在腾讯云备案沈阳市建设工程质量监督局网站
  • 优秀网站建设济南网站制作哪家专业
  • 东莞做网站it s实体电商app定制开发
  • 网站建设开发服务费怎么做分录如何制作一个网站包含多个网页
  • 嘉兴网站建设科技有限公司广东工程建设监理有限公司网站
  • Python每日一练---第一天:买卖股票的最佳时机
  • 网站可以做什么企业网站建设专家
  • 上海响应式网站开发深圳的网站建设公司哪家好
  • wordpress编辑富文seo推广有效果吗
  • 淮北论坛最新招聘信息网如何提升seo
  • 用dw做网站背景关于二手书的网站开发ppt
  • 企业品牌网站建设首选公司网站搭建修改收费依据
  • 河南企业建设网站网站建设的课件
  • 具有品牌的网站建设上海网站排名团队
  • 杭州科技网站作文库网站
  • 建站设计网站微信公众号的子菜单网页怎么制作
  • wordpress插件ssh东莞seo网络营销策划
  • 网站自然排名这么做微信小商店分销功能
  • 做钓鱼网站判刑中国建设人才服务信息网站
  • 网页设计公司平台凤山网站seo
  • 网站设计网络推广商贸平台公司手册制作网站
  • 电子商务网站建设对毕业设计搜索百度网页版
  • 鞋材加工东莞网站建设网站开发策划书怎么写
  • 韩国网站建站昆山制造网站的地方
  • 六安网站建设全包关于网站集约化建设公函
  • 校园门户网站建设实施方案小7手游官网下载