算法题目---位运算

(一).基本概念

(二).算法题目

1.位1的个数

191. 位1的个数 - 力扣(LeetCode)

解法:位运算

java 复制代码
    public int hammingWeight(int n) {
        int count=0;
        for (int i = 0; i < 32; i++) {
            if (((n>>i)&1)==1){
                count++;
            }
        }
        return count;
    }

2.比特位计数

338. 比特位计数 - 力扣(LeetCode)

计算:位运算

3.汉明距离

461. 汉明距离 - 力扣(LeetCode)

解法:位运算

java 复制代码
    public int hammingDistance(int x, int y) {
        int xor=x^y;
        int count=0;
        for (int i = 0; i < 32; i++) {
            if (((xor>>i)&1)==1){
                count++;
            }
        }
        return count;
    }

4.只出现一次的数字

136. 只出现一次的数字 - 力扣(LeetCode)

解法:位运算

将所有的数异或在一起,最后的结果就是只出现一次的数

java 复制代码
    public int singleNumber(int[] nums) {
        int xor=0;
        for (int num:nums) {
            xor^=num;
        }
        return xor;
    }

5.只出现一次的数字Ⅲ

260. 只出现一次的数字 III - 力扣(LeetCode)

解法:位运算

java 复制代码
    public int[] singleNumber(int[] nums) {
        int xor=0;
        for (int num:nums) {
            xor^=num;
        }
        int h=1;
        while ((xor&h)==0){
            h=h<<1;
        }
        int group1=0;
        int group2=0;
        for (int num:nums) {
            if ((num&h)==0){
                group1=group1^num;
            }else{
                group2=group2^num;
            }
        }

        return new int[]{group1,group2};
    }

6.判断字符是否唯一

面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)

解法:位图

java 复制代码
    public boolean isUnique(String astr) {
        char[] ch=astr.toCharArray();
        int ret=0;
        if (ch.length>26){
            return false;
        }
        for (char c:ch) {
            if (((ret>>(c-'a'))&1)==1){
                return false;
            }else{
                ret=ret|(1<<(c-'a'));
            }
        }
        return true;
    }

7.丢失的数字

268. 丢失的数字 - 力扣(LeetCode)

解法:位运算

java 复制代码
    public int missingNumber(int[] nums) {
        int xor=0;
        for (int num:nums) {
            xor^=num;
        }
        for (int i = 0; i <=nums.length; i++) {
            xor^=i;
        }
        return xor;
    }

8.两整数之和

371. 两整数之和 - 力扣(LeetCode)

解法:位运算

9.只出现一次的数字Ⅱ

137. 只出现一次的数字 II - 力扣(LeetCode)

解法:位运算

java 复制代码
    public int singleNumber(int[] nums) {
        int ret=0;
        for (int i = 0; i < 32; i++) {
            int sum=0;
            for (int num:nums) {
                if (((num>>i)&1)==1){
                    sum++;
                }
            }
            sum%=3;
            if (sum==1){
                ret=ret|(1<<i);
            }
        }
        return ret;
    }

10.消失的两个数字

面试题 17.19. 消失的两个数字 - 力扣(LeetCode)

解法:位运算

java 复制代码
    public int[] missingTwo(int[] nums) {
        int xor=0;
        int n=nums.length+2;
        for (int num:nums) {
            xor^=num;
        }
        for (int i = 0; i <= n; i++) {
            xor^=i;
        }

        int h=1;
        while ((xor&h)==0){
            h=h<<1;
        }
        int group1=0;
        int group2=0;
        for (int num:nums) {
            if ((num&h)==0){
                group1^=num;
            }else{
                group2^=num;
            }
        }
        for (int i = 0; i <= n; i++) {
            if ((i&h)==0){
                group1^=i;
            }else{
                group2^=i;
            }
        }
        return new int[]{group1,group2};
    }
相关推荐
小蒋学算法11 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
荆棘鸟智能12 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
hhb_61812 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法
朝朝辞暮i13 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
苏打豆13 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人
FluxArt14 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
思麟呀14 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
阜阳山君GEO14 小时前
豆包 SEED 新版本 GEO 优化:信源金字塔、打分体系与避坑落地指南
人工智能·算法
晓天衡宇•评测社区14 小时前
晓天衡宇亮相 2026 云栖大会:迈向更可信的高质量评测
人工智能·算法·机器学习
CQU_JIAKE14 小时前
9.12[a]
算法