当前位置: 首页 > news >正文

位运算算法题

  1. 缺失的数字

 public int missingNumber(int[] nums) {

        int ret = 0;

        for (int x : nums)

            ret ^= x;

        for (int i = 0; i <= nums.length; i++)

            ret ^= i;

        return ret;

    }

  1. 两整数之和

 public int getSum(int a, int b) {

        while (b != 0) {

            int x = a ^ b; // 先算出⽆进位相加的结果

            int carry = (a & b) << 1; // 计算进位

            a = x;

            b = carry;

        }

        return a;

    }

  1. 只出现一次的数字2

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

输入:nums = [2,2,3,2]

输出:3

 public int singleNumber(int[] nums) {

        int ret = 0;

        for (int i = 0; i < 32; i++) // 依次修改 ret 中的每⼀个⽐特位

        {

            int sum = 0;

            for (int x : nums) // 统计 nums 中所有的数的第 i 位的和

                if (((x >> i) & 1) == 1)

                    sum++;

            if (sum%3 == 1)

                ret |= 1 << i;

        }

        return ret;

    }

  1. 消失的两个数字

 public int[] missingTwo(int[] nums) {

        // 1. 先把所有的数异或在⼀起

        int tmp = 0;

        for (int x : nums)

            tmp ^= x;

        for (int i = 1; i <= nums.length + 2; i++)

            tmp ^= i;

        // 2. 找出 a,b 两个数⽐特位不同的那⼀位

        int diff = 0;

        for(;diff<32;diff++){

               if (((tmp >> diff) & 1) == 1){

                  break;

               }

        }

        // 3. 将所有的数按照 diff 位不同,分两类异或

        int[] ret = new int[2];

        for (int x : nums)

            if (((x >> diff) & 1) == 1)

                ret[1] ^= x;

            else

                ret[0] ^= x;

        for (int i = 1; i <= nums.length + 2; i++)

            if (((i >> diff) & 1) == 1)

                ret[1] ^= i;

            else

                ret[0] ^= i;

        return ret;

}

http://www.dtcms.com/a/273382.html

相关文章:

  • 第七讲:C++中的string类
  • 深度学习参数初始化方法详解及代码实现
  • 深度学习×第7卷:参数初始化与网络搭建——她第一次挑好初始的重量
  • ZW3D 二次开发-创建椭球体
  • 灰度发布策略制定方案时可以参考的几个维度
  • 递推+高精度加法 P1255 数楼梯
  • apt -y参数的含义
  • 计算机视觉 之 数字图像处理基础(一)
  • Kubernetes 1.23.6 kube-scheduler 默认打分和排序机制详解
  • 多商户商城系统源码选型指南:开源 vs 定制,哪种更适合?
  • 救回多年未用kubeadm搭建的kubernetes集群
  • 5. isaac sim4.2 教程-Core API-操作机械臂
  • 用黑盒测试与白盒测试,读懂专利审查的 “双重关卡”​​
  • K8S的CNI之calico插件升级至3.30.2
  • 深度学习中的 Seq2Seq 模型与注意力机制
  • 解释sync.WaitGroup的用途和工作原理。在什么情况下应该使用它?
  • 时间显示 蓝桥云课Java
  • Android ViewBinding 使用与封装教程​​
  • Netron的基本使用介绍
  • UNet改进(20):融合通道-空间稀疏注意力的医学图像分割模型
  • 客户频繁问询项目进度,如何提高响应效率
  • Java 中的多线程实现方式
  • Spring AI 系列之八 - MCP Server
  • NFS文件存储及部署论坛(小白的“升级打怪”成长之路)
  • (鱼书)深度学习入门2:手搓感知机
  • PostgreSQL创建新实例并指定目录
  • 下一代防火墙混合模式部署
  • Jupyter介绍
  • MySQL事务实现原理
  • SpringCloud系列 - 分布式锁(八)