ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 位操作基本运算符 与,或,取反,异或,左移,右移。 | 符号 | 描述 | 运算规则 | |:-: | :-: | :- | | & | 与 | 两个位都为1时,结果才为1 | | l | 或 | 两个位都为0时,结果才为0 | | ^ | 异或 | 两个位相同为0,相异为1 | | ~ | 取反 | 0变1,1变0 | | << | 左移 | 各二进制位左移若干位,高位丢弃,低位补0 | | << | 右移 | 各二进制位由移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一 | #### [136\. 只出现一次的数字](https://leetcode-cn.com/problems/single-number/) 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 ``` class Solution { public: int singleNumber(vector<int>& nums) { /* * 10 ^10 == 00 * 两个数异或就变成0 */ int result = 0; for (auto& i : nums) result ^= i; return result; } }; ``` #### [137\. 只出现一次的数字 II](https://leetcode-cn.com/problems/single-number-ii/) 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,3,2] 输出: 3 ``` class Solution { public: int singleNumber(vector<int>& nums) { // 统计每位1的个数, 然后除以3取余 int result = 0; for (int i = 0; i < 32; ++i) { int sum = 0; for (auto& x : nums) sum += (x >> i) & 1; result ^= (sum % 3) << i; } return result; } }; ```