算法题目---位运算

(一).基本概念

(二).算法题目

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};
    }
相关推荐
计算机安禾2 小时前
【数据结构与算法】第10篇:项目实战:学生信息管理系统(线性表版)
开发语言·数据结构·算法·visual studio
q_35488851532 小时前
计算机毕业设计:汽车数据可视化与智能分析平台 Django框架 Scrapy爬虫 可视化 车辆 懂车帝大数据 数据分析 机器学习(建议收藏)✅
算法·信息可视化·django·flask·汽车·课程设计·美食
FakeOccupational2 小时前
【电路笔记 通信】IEEE 1588精密时间协议(PTP):数学假设+时间同步链路建模+消除主从偏差算法
笔记·算法
客卿1232 小时前
最小生成树(贪心)--构造回文串(字符串 + 回文判断 + 构造)
java·开发语言·算法
88号技师2 小时前
2026年3月中科院一区SCI-赏金猎人优化算法Bounty Hunter Optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
再卷也是菜2 小时前
算法基础篇(12)Trie树
算法·字典树
小糯米6012 小时前
C++ 单调栈原理与模板
开发语言·c++·算法
常利兵2 小时前
Android 集合探秘:ArrayMap 与 SparseArray 的奇妙之旅
android·算法·哈希算法
滴滴答滴答答2 小时前
LeetCode Hot100 之 41 缺失的第一个正数
算法·leetcode·职场和发展