算法题目---位运算

(一).基本概念

(二).算法题目

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};
    }
相关推荐
Raink老师20 分钟前
用100道题拿下你的算法面试(矩阵篇-2):求转置矩阵
算法·面试·矩阵
算法鑫探6 小时前
闰年判断:C语言实战解析
c语言·数据结构·算法·新人首发
WBluuue7 小时前
数据结构与算法:康托展开、约瑟夫环、完美洗牌
c++·算法
木子墨5167 小时前
LeetCode 热题 100 精讲 | 并查集篇:最长连续序列 · 岛屿数量 · 省份数量 · 冗余连接 · 等式方程的可满足性
数据结构·c++·算法·leetcode
王老师青少年编程8 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
EQUINOX18 小时前
2026年码蹄杯 本科院校赛道&青少年挑战赛道提高组初赛(省赛)第一场,个人题解
算法
萝卜小白8 小时前
算法实习Day04-MinerU2.5-pro
人工智能·算法·机器学习
Liangwei Lin8 小时前
洛谷 P3133 [USACO16JAN] Radio Contact G
数据结构·算法
weixin_513449968 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
code_pgf9 小时前
Qwen2.5-VL 算法解析
人工智能·深度学习·算法·transformer