算法题目---位运算

(一).基本概念

(二).算法题目

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};
    }
相关推荐
啊真真真21 小时前
ArgoCD:我的GitOps探索之旅与未来展望
java·算法·argocd
就改了1 天前
Java8 日期处理(详细版)
java·python·算法
2601_958352901 天前
接上USB,焊上麦,通话瞬间安静——WX-0813如何用AI降噪+100dB消回音,把嘈杂通话变成“金子“般清晰
人工智能·算法·语音识别·硬件开发·语音模块·降噪消回音
小蒋学算法1 天前
算法-M个非重叠子数组最大和II-WQS二分学习
数据结构·学习·算法
我要见SA姐11 天前
AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
人工智能·算法·游戏
Jerry1 天前
LeetCode 56. 合并区间
算法
实验如有神祝女士1 天前
不同参数规模大模型在医学翻译场景的适配差异
论文阅读·人工智能·深度学习·学习·算法·语言模型·论文笔记
windliang2 天前
Claude Code 源码分析(三):一次模型回答如何流进 Agent
前端·算法·ai编程
Kyrie_kk2 天前
Java--BigInteger 超大整数计算
java·算法
汽车网络安全爱好者2 天前
Public Key Infrastructure(二)— 深入理解 X.509 证书:从 RFC 5280 到 OpenSSL 实践
运维·服务器·算法·网络安全·汽车·密码学·可信计算技术