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

位运算专题

分享丨【题单】位运算(基础/性质/拆位/试填/恒等式/思维) - 力扣(LeetCode)

Leetcode 3133. 数组最后一个元素的最小值

我的答案与思路:

class Solution {
public:
// 4 --> (100)2    7 --> (0111)2
// 5 --> (101)2    15--> (1111)2
// 6 --> (110)2
// 插入的时候①1 = (1)10 ②10 = (2)10 ③11 = (3)10 ④100 = (4)10 ⑤101 ⑥110 ⑦111string getBin(int x){string ans = "";while (x){if(x & 1)   ans += "1";else        ans += "0";x >>= 1;}reverse(ans.begin(), ans.end());return ans;}string getInsert(int n){int sit = n - 1;return getBin(sit);}long long minEnd(int n, int x) {// x 一定是整个数组中最小的string xbin = getBin(x);string inbin = getInsert(n);int idx = xbin.length() - 1;for(int i = inbin.length() - 1; i >= 0; i --){if(idx >= 0){while(idx >= 0 && xbin[idx] != '0'){idx --;}   // 找到第一个为"0"的地方if(idx < 0) xbin = inbin[i] + xbin;else    xbin[idx] = inbin[i];idx --;}elsexbin = inbin[i] + xbin;}// 将2进制string转换为十进制整数long long res = 0;for(auto& v: xbin){res <<= 1;res += (v - '0');}return res;}
};

更加优雅的实现方式:从集合论的角度进行实现

class Solution {
public:long long minEnd(int n, int x) {n --;   // 插入数位就是n - 1long long res = x;int i = 0, j = 0;while (n >> j){if((res >> i & 1) == 0){   // 当x的第i个bit是0(需要填入数)// 空位填入n的第j个bitres |= (long long) (n >> j & 1) << i;j ++;}i ++;}return res;}
};

优化方法:lowbit

        把 x 取反,用 lowbit 枚举其中的 1,就是要填的空位。

class Solution {
public:long long minEnd(int n, int x) {n --;   // 插入数位就是n - 1long long res = x;int j = 0;for (long long t = ~x, lb; n >> j; t ^= lb){lb = t & -t;res |= (long long)(n >> j ++ & 1) * lb;}return res;}
};

http://www.lryc.cn/news/430547.html

相关文章:

  • HaProxy学习 —300K的TCP Socket并发连接实现(翻译)
  • 92.WEB渗透测试-信息收集-Google语法(6)
  • [数据集][目标检测]木材缺陷检测数据集VOC+YOLO格式2383张10类别
  • 【启明智显分享】智能音箱AI大模型一站式解决方案重塑人机交互体验,2个月高效落地
  • 逻辑与集合论基础及其在编程中的应用
  • 【无标题】为什么 pg_rewind 在 PostgreSQL 中很重要?
  • hostapd生成beacon_ie
  • leetcode349:两个数组的交集
  • Metasploit漏洞利用系列(八):MSF渗透测试 - PHPCGI漏洞利用实战
  • 基于python的主观题自动阅卷系统设计与实现
  • 计算机毕业设计仪器设备管理系统-折旧-报废-转移-借出-归还
  • DAY37
  • 将iso格式的镜像文件转化成云平台能安装的镜像格式(raw/vhd/QCOW2/VMDK )亲测--图文详解
  • Numba加速计算(CPU + GPU + prange)
  • electron 两个渲染进程之间通信
  • 配置ROS环境
  • 力扣 128. 最长连续序列
  • Stable Diffusion AI绘画工具的安装与配置(MAC用户)
  • flowable源码解读——并行多实例节点任务是否是顺序生成
  • 【机器学习】AGI的基本概念、技术挑战和应用前景
  • flink 使用RocksDB作为状态后端
  • 【运维高级内容--MySQL】
  • 【仿真与实物设计】基于51单片机设计的打地鼠游戏机——程序源码原理图proteus仿真图PCB设计文档演示视频元件清单等(文末工程资料下载)
  • iPhone设备使用技巧:忘记密码的情况下如何解除iOS 18/17屏幕时间
  • 内网渗透的风行者—Yasso
  • Android13 app后台无法启动Abort background activity starts from
  • Day45 | 99.岛屿数量 深搜 广搜 100.岛屿的最大面积
  • css之grid布局(网格布局)
  • 数据可视化大屏模板-美化图表
  • 【与C++的邂逅】--- 类和对象(中)