
位运算
文章平均质量分 53
min_coder
这个作者很懒,什么都没留下…
展开
-
周赛2172. 数组的最大与和
题目 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共有 numSlots 个篮子,编号为 1 到 numSlots 。 你需要把所有 n 个整数分到这些篮子中,且每个篮子 至多 有 2 个整数。一种分配方案的 与和 定义为每个数与它所在篮子编号的 按位与运算 结果之和。 比方说,将数字 [1, 3] 放入篮子 1 中,[4, 6] 放入篮子 2 中,这个方案的与和为 (1 AND 1) + (3 AND 1) + (4 AND原创 2022-02-16 15:42:53 · 451 阅读 · 0 评论 -
LC222. 完全二叉树的节点个数
题目 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 提示: 树中节点的数目范围是[0, 5 * 104] 0 <= Node.val <= 5 * 104 题目数据保证输入的树是 完全二叉树 进阶:遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更原创 2022-02-02 21:25:00 · 930 阅读 · 0 评论 -
周赛5995. 字符串分组
题目 给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。words 中任意一个子串中,每个字母都至多只出现一次。 如果通过以下操作之一,我们可以从 s1 的字母集合得到 s2 的字母集合,那么我们称这两个字符串为 关联的 : 往 s1 的字母集合中添加一个字母。 从 s1 的字母集合中删去一个字母。 将 s1 中的一个字母替换成另外任意一个字母(也可以替换为这个字母本身)。 数组 words 可以分为一个或者多个无交集的 组 。一个字符串与一个组如果满足以下 任一 条原创 2022-02-02 14:29:23 · 898 阅读 · 0 评论 -
周赛5992. 基于陈述统计最多好人数
题目 游戏中存在两种角色: 好人:该角色只说真话。 坏人:该角色可能说真话,也可能说假话。 给你一个下标从 0 开始的二维整数数组 statements ,大小为 n x n ,表示 n 个玩家对彼此角色的陈述。具体来说,statements[i][j] 可以是下述值之一: 0 表示 i 的陈述认为 j 是 坏人 。 1 表示 i 的陈述认为 j 是 好人 。 2 表示 i 没有对 j 作出陈述。 另外,玩家不会对自己进行陈述。形式上,对所有 0 <= i < n ,都有 statement原创 2022-01-23 20:59:11 · 1533 阅读 · 0 评论 -
LC401. 二进制手表
题目 二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。 例如,下面的二进制手表读取 “3:25” 。 (图源:WikiMedia - Binary clock samui moon.jpg ,许可协议:Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) ) 给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有原创 2022-01-14 20:04:49 · 391 阅读 · 0 评论 -
LC342. 4的幂
题目 给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x 提示: -231 <= n <= 231 - 1 进阶:你能不使用循环或者递归来完成本题吗? 时间复杂度O(1)的方法可能在面试时让手写 思路 4的幂一定是2的幂,所以可以在2的幂的判断条件上增加条件。 首先看一下:2的幂:题解 我们知道了2的幂条件是n&(n-1) == 0 现在我们只要找到4的幂和其他2原创 2022-01-14 17:21:22 · 332 阅读 · 0 评论 -
LC231. 2 的幂
题目 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。 提示: -231 <= n <= 231 - 1 进阶:你能够不使用循环/递归解决此问题吗? 思路 进阶要求不用循环和递归,说明时间复杂度需要为O(1)。 对于这种数值类运算,不经过循环只能采用位运算。 位运算最常用的是二进制,在二进制中我们可以发现: 1:1 2:10 4:100 8:1000 可以原创 2022-01-14 17:09:09 · 214 阅读 · 0 评论 -
LC136. 只出现一次的数字
题目: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。(不使用额外空间来实现) 思路: 不能使用额外空间,可以通过异或来求解。 将数字转化为二进制,当两数相同时,其对应的位将异或为0,最后所有数累计异或可以得到 如1 ^ 2 ^ 1 = 2 题解: class Solution { public: int singleNumber(vector<int>& nums) { int a = 0;原创 2021-09-16 09:25:18 · 82 阅读 · 0 评论