算法题目---位运算

(一).基本概念

(二).算法题目

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};
    }
相关推荐
lisw0514 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
一起学安全技术14 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
Delightrs15 小时前
Rust LeetCode238 算法题解
开发语言·算法·rust
自信1504130575916 小时前
重生之从0开始学习c++之——vector-中篇
c++·学习·算法
GoAI1 天前
DeepSeek Harness Memory (一)主流记忆插件总结
后端·算法·面试
Pniubi1 天前
力扣54.螺旋矩阵
算法·leetcode·矩阵
choumou_M1 天前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
Coder_Shenshen1 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
心仪久了会沦陷1 天前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法