八、位运算
-
剑指15,二进制中1的个数
class Solution { public: int hammingWeight(uint32_t n) { int cnt = 0; for(int i=0;i<32;++i) { if(1<<i & n) ++cnt; } return cnt; } };
-
剑指56,数组中数字出现的次数1
//时间O(n),空间O(1) //三个关键点 //1.求出tmp=x^y //2.找出tmp中从右往左第一个为1的位置,用于区分x和y //3.根据此位进行再异或分出x和y class Solution { public: vector<int> singleNumbers(vector<int>& nums) { //x^y int tmp = 0; for(int i:nums) { tmp ^= i; } //从右往左找出第一个tmp为1的位 //使用此位区分x和y int n = 1;