前言
欢迎大家积极在评论区留言发表自己的看法,知无不言,言无不尽,养成每天刷题的习惯,也可以自己发布优质的解题报告,供社区一同鉴赏,吸引一波自己的核心粉丝。
今天是六月集训第十天:位运算🔥🔥🔥
今天戴牙套去了,题目就做了两道,后面一点点补起来吧。

一、练习题目
二、算法思路
- 1、868. 二进制间距:利用cnt数组来统计有1 的地方的下标。🔥
- 2、1734. 解码异或后的排列:
- 3、89. 格雷编码:利用格雷码的性质。🔥
- 4、1238. 循环码排列:
三、源码剖析
// 868. 二进制间距
class Solution {
public:
int binaryGap(int n) {
int cnt[32] = {0}, t = 0, ans = 0;
for (int i = 0; i < 32; i++) {
if ((n >> i) & 1 == 1) { //(1)
cnt[t++] = i;
}
}
for (int i = 0; i < t - 1; i++){
ans = max(ans, cnt[i + 1] - cnt[i]); //(2)
}
return ans;
}
};
- 1、每次右移一位判断下是不是1,是1的话把数位下标记录到数组中;
- 2、遍历数组求得最大的间距。
// 1734. 解码异或后的排列
- 1、
// 89. 格雷编码
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> result;
result.push_back(0);
if (n == 0)
return result;
int first = 1;
for (int i = 0; i < n; i++)
{
for (int j = result.size() - 1; j >= 0; j--)
{
result.push_back(first + result[j]);
}
first = first << 1;
}
return result;
}
};
- 1、利用格雷码性质。
// 1238. 循环码排列
- 1、
本文介绍了四位编程题目,涉及位运算的应用,包括二进制间距、解码异或后的排列、格雷编码和循环码排列。作者分享了算法思路与源代码,重点解析了如何利用位操作找到二进制数中1之间的最大距离以及实现格雷码的生成。适合提升位运算技巧和算法理解。
559

被折叠的 条评论
为什么被折叠?



