自己做的网站如何上百度,阿里巴巴网站怎么做,wordpress 拍照,青岛企业建站引子#xff1a;我们在之前的案子中破解过基础的单身狗问题#xff0c;那面对更有挑战的案子#xff0c;且看李先生如何破局#xff0c;那下凶手#xff01;
复习#xff1a;
1#xff0c;位操作符#xff1a;
正整数原#xff0c;反#xff0c;补码都相同
首位是…引子我们在之前的案子中破解过基础的单身狗问题那面对更有挑战的案子且看李先生如何破局那下凶手
复习
1位操作符
正整数原反补码都相同
首位是符号位
原码也可以用补码1表示
计算机中用的是补码
左移:左边抛弃右边补0
右移逻辑右移和算数右移
按位与有0就为0全1才为1
按位或|只要友谊就位1全为0才为0
按位异或^相同为0不相同为1
按位取反~1为0,0为1
逗号表达式从左向右依次执行整个表达式是最后一个表达式的结果
2找出唯一的数字利用异或的作用 int value0; for(auto e:nums) {value^e;}
3应用 一不加临时变量进行交换 int a0; int b12; aa^b; ba^b; aa^b;
二求一个整数存储在内存中二进制一的个数 int n15; int conunt0; while(n) nn(n-1); count;
三按位与 a11;说明a的二进制最低位是1 a10;说明a的二进制最低位是0
四判断是否为偶数 if(nn(n-1)0) {coutyesendl;}
场景复现力扣
一
给你一个整数数组 nums其中恰好有两个元素只出现一次其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题 二
给你一个整数数组 nums 除某个元素仅出现 一次 外其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 题解
对于场景一 思路 我们先用异或筛选出那二个只出现过一次的异或值记为x, 然后用分组思想我们可以使用位运算 x -x取出 x 的二进制表示中最低位那个 1 注意在C语言中-x实现是用取反1实现那我们就可以知道在这个位置我们要找的这二个数的二进值不同一个是0一个是1所以我们就可以用这个位置的一进行分组可以分成二组在进行分别全员异或找到这二个值那就解出来了 代码 class Solution {
public: vectorint singleNumber(vectorint nums) { unsigned int value0; for(auto e:nums) { value^e; } int peatvalue(-value); int h10,h20; for(auto e:nums) { if(epeat) { h1^e; } else{ h2^e; } } return{h1,h2};//采用了匿名构造函数 }
};
结果
对于场景二 思路所求的数字第 i 个二进制位就是数组中所有元素的第 i 个二进制位之和除以 3的余数 自己琢磨琢磨
class Solution {
public: int singleNumber(vectorint nums) { int value0; for(int i0;i32;i) { int sum0; for(auto e:nums) { sum((ei)1); } if(sum%3) { value|(1i); } } return value; }
};
就到今天啦期待下次相遇我们下次再见