位运算
Ealiser
这个作者很懒,什么都没留下…
展开
-
LeetCode第137题 只出现一次的数字II
算法 数学 核心思想 最开始想用桶排序的思路,但是JAVA数组的最长长度是31位,所以作罢。 后来采用老办法,统计每个位置1的个数 num & 1//确定最后一位是不是1 res |= ans[31-i] % m;//复原位置 代码 class Solution { public int singleNumber(int[] nums) { int[] ans = new int[32]; for(int num:nums){ .原创 2022-04-02 15:31:44 · 1234 阅读 · 0 评论 -
LeetCode第338、191题 比特位计数 位1的个数
算法 数学,逻辑与 核心思想 计算1比特数应该怎么做?Brian Kernighan 算法 对于任意整数 xx,令 x=x & (x−1),该运算将 xx 的二进制表示的最后一个 11 变成 00。因此,对 xx 重复该操作,直到 xx 变成 00,则操作次数即为 xx 的「一比特数」。 针对第二题,只需要将while条件变为!=0即可 while x > 0{ int nums = 0; x = x &(x-1); nums++; } 代码 class Solution .原创 2022-04-01 13:06:09 · 888 阅读 · 0 评论 -
LeetCode第231题 2的幂
算法 位运算 核心思想 两种思路 ①一种是直接左移,这里需要注意即便使用long型结构保存数据,1的左移32位仍然是负数,因为1是32位保存的数据. ②第二种方法为考虑2的倍数的特点,必定是只存在一个2,所以令n与(n-1)进行逻辑与即可。 代码 class Solution { public boolean isPowerOfTwo(int n) { int x = 0; long temp = 0; while(temp <= n){ .原创 2022-04-01 10:39:52 · 1007 阅读 · 0 评论 -
LeetCode第268题 丢失的数字
算法 位运算 --> 异或 核心思想 异或专注于寻找缺少的数字或者出现一次的数,利用的是异或和。 神奇,不知道原理。 代码 class Solution { public int missingNumber(int[] nums) { int xor = 0; int n = nums.length; for(int i = 0;i<n;i++){ xor ^= nums[i]; } .原创 2022-03-31 14:40:07 · 645 阅读 · 0 评论