数据结构-位运算笔记

news2024/11/25 13:34:50

基础

【位运算】——揭秘位运算:高效解题的关键技巧_常见位运算-CSDN博客

位1的个数

class Solution {
    // 定义一个公共方法hammingWeight,它接受一个整数n作为参数,并返回一个整数。
    public int hammingWeight(int n) {
        // 初始化一个变量ret,用来存储汉明权重的结果,初始值为0。
        int ret = 0;

        // 循环32次,因为一个整数(int类型)在Java中是32位的。
        for (int i = 0; i < 32; i++) {
            // 使用位运算符"&"和左移操作"<<"来检查n的第i位是否为1。
            // (n & (1 << i)) != 0 这个表达式的意思是,将1左移i位后与n进行按位与操作。
            // 如果结果不为0,说明n的第i位是1。
            if ((n & (1 << i)) != 0) {
                // 如果第i位是1,那么将ret加1,因为汉明权重就是1的个数。
                ret++;
            }
        }

        // 循环结束后,返回计算得到的汉明权重。
        return ret;
    }
}

Pow(x, n)

class Solution {
    // 计算x的n次幂
    // x: 底数
    // n: 指数,可以是正数或负数
    public double myPow(double x, int n) {
        // 将n转换为长整型,以处理大整数
        long N = n;
        
        // 如果N是非负数,直接计算x的N次幂
        // 如果N是负数,计算x的(-N)次幂,然后取倒数
        return N >= 0 ? pow(x, N) : 1.0 / pow(x, -1 * N);
    }

    // 递归方法,用于计算x的N次幂
    // x: 底数
    // N: 指数,长整型,用于处理大整数
    double pow(double x, long N) {
        // 如果指数N为0,任何数的0次幂都是1
        if (N == 0) {
            return 1.0;
        }

        // 递归计算x的N/2次幂
        double y = pow(x, N / 2);

        // 如果N是偶数,那么x^N = (x^(N/2))^2
        // 如果N是奇数,那么x^N = x * (x^(N/2))^2
        return N % 2 == 0 ? y * y : y * y * x;
    }
}

撞色搭配

class Solution {
    public int[] sockCollocation(int[] sockets) {
        // 初始化变量
        // n 用于存储所有插座的异或结果
        int n = 0;
        // m 用于找到 n 中最低位的 1
        int m = 1;
        // p 和 q 分别用于存储与 m 位为 1 和 0 的插座的异或结果
        int p = 0;
        int q = 0;

        // 计算所有插座的异或结果
        for(int socket : sockets){
            n ^= socket;
        }

        // 找到 n 中最低位的 1
        while((n & m) == 0){
            m <<= 1; // 将 m 左移一位,直到找到 n 的最低位 1
        }

        // 根据 m 的最低位 1,将插座分为两组,并计算每组的异或结果
        for(int socket : sockets){
            if((socket & m) != 0){ // 如果插座的 m 位为 1
                p ^= socket; // 将该插座加入到 p 的异或计算中
            }else{ // 如果插座的 m 位为 0
                q ^= socket; // 将该插座加入到 q 的异或计算中
            }
        }
        // 返回两种不同插座的二进制表示
        return new int[]{p, q};
    }
}

训练计划 VI

class Solution {
    public int trainingPlan(int[] actions) {
        // 创建一个长度为32的数组,用于统计每个位上1的个数
        int demo[] = new int[32];
        
        // 遍历actions数组中的每个整数
        for(int action : actions){
            // 从最低位开始,逐位检查action中的每个位
            for(int i = 0 ; i < 32; i++){
                // 如果当前位是1,则在demo数组对应的位置上加1
                demo[i] += action & 1;
                // 将action右移一位,准备检查下一位
                action >>= 1;
            }
        }

        // 初始化变量m为3,表示每个位上1的最大个数
        int m = 3;
        // 初始化返回值ret为0
        int ret = 0;
        // 从最高位开始,逆序遍历demo数组
        for(int i = 31; i >= 0; i--){
            // 将ret左移一位,为新的位腾出空间
            ret <<= 1;
            // 将demo[i]除以m的余数作为新的位加到ret上
            ret |= demo[i] % m;
        }

        // 返回构造好的整数
        return ret;
    }
}

加密运算

class Solution {
    /**
     * 进行加密计算的方法。
     * 这个方法使用异或运算和位移运算来加密两个整数。
     * @param dataA 第一个整数数据。
     * @param dataB 第二个整数数据。
     * @return 加密后的结果。
     */
    public int encryptionCalculate(int dataA, int dataB) {
        // 进位
        int nextPoi; // 用于存储进位值
        // 本位
        int localPoi; // 这个变量实际上没有在代码中使用,可能是一个遗留的变量

        // 使用while循环,直到dataA变为0
        while(dataA != 0){
            // 计算进位值,即dataA和dataB按位与的结果左移1位
            nextPoi = (dataA & dataB) << 1;
            // 将dataB和dataA进行异或运算,更新dataB的值
            dataB ^= dataA;
            // 将进位值赋给dataA,用于下一次循环
            dataA = nextPoi;
        }

        // 当dataA为0时,循环结束,返回dataB,即加密后的结果
        return dataB;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大数据分析机器学习】分布式机器学习

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

SOL链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展&#xff0c;Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu&#xff0c;再到更多细分的 Meme 项目&#xff0c;这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

一篇保姆式centos/ubuntu安装docker

前言&#xff1a; 本章节分别演示centos虚拟机&#xff0c;ubuntu虚拟机进行安装docker。 上一篇介绍&#xff1a;docker一键部署springboot项目 一&#xff1a;centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest doc…

Dubbo源码解析-Dubbo的线程模型(九)

一、Dubbo线程模型 首先明确一个基本概念&#xff1a;IO 线程和业务线程的区别 IO 线程&#xff1a;配置在netty 连接点的用于处理网络数据的线程&#xff0c;主要处理编解码等直接与网络数据 打交道的事件。 业务线程&#xff1a;用于处理具体业务逻辑的线程&#xff0c;可以…

前端全栈 === 快速入 门 Redis

目录 简介 通过 docker 的形式来跑&#xff1a; set、get 都挺简单&#xff1a; incr 是用于递增的&#xff1a; keys 来查询有哪些 key: redis insight GUI 工具。 list 类型 left push rpush lpop 和 rpop 自然是从左边和从右边删除数据。​编辑 如果想查看数据…

Python MySQL SQLServer操作

Python MySQL SQLServer操作 Python 可以通过 pymysql 连接 MySQL&#xff0c;通过 pymssql 连接 SQL Server。以下是基础操作和代码实战示例&#xff1a; 一、操作 MySQL&#xff1a;使用 pymysql python 操作数据库流程 1. 安装库 pip install pymysql2. 连接 MySQL 示例 …

编程语言之C++诞生记!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C诞生的相关内容&#xff01; 关于【C诞…

核心差异:知识VS文档管理(+工具软件安利)

在讨论知识管理和文档管理时&#xff0c;我们经常会听到这两种说法被混淆使用。然而&#xff0c;它们各自服务于不同的目的&#xff0c;这一点至关重要。 想象一下&#xff0c;你是一名项目经理&#xff0c;面临以下两项任务&#xff1a; 存储最新的项目计划捕捉团队讨论中获…

医院挂号就诊系统(源码+数据库+报告)

基于SpringBoot的医院挂号就诊系统&#xff0c;系统包含三种角色&#xff1a;管理员、医生、用户,系统分为前台和后台两大模块&#xff0c;主要功能如下。 前台&#xff1a; - 首页&#xff1a;展示医院相关信息、推荐医生等内容。 - 健康教育&#xff1a;提供健康知识、文章等…

【热门主题】000065 探索人工智能学习框架:开启智能未来的钥匙

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…

《智慧教育实时数据分析推荐项目》详细分析

一、项目介绍 1、背景介绍 在互联网、移动互联网的带动下&#xff0c;教育逐渐从线下走向线上&#xff0c;在线教育近几年一直处于行业的风口浪尖&#xff0c;那随着基础设施的不断完善&#xff0c;用户需求也发生不少变化&#xff0c;因此传统教育机构、新兴互联网企业都在探…

使用LUKS对Linux磁盘进行加密

前言 本实验用于日常学习用&#xff0c;如需对存有重要数据的磁盘进行操作&#xff0c;请做好数据备份工作。 此实验只是使用LUKS工具的冰山一角&#xff0c;后续还会有更多功能等待探索。 LUKS&#xff08;Linux Unified Key Setup&#xff09;是Linux系统中用于磁盘加密的一…

在 cmd 输入 python.exe 后不报错也无反应的问题

在 cmd 输入 python.exe 后不报错&#xff1a;‘python.exe ’不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件&#xff0c;也无反应。只是显示这样一个弹窗&#xff1a; 查了下环境变量path&#xff0c;看看有什么地方有python.exe&#xff0c;发现原来在C:\Us…

10、PyTorch autograd使用教程

文章目录 1. 相关思考 1. 相关思考

如何在 Ubuntu 22 04 上安装和配置 Ansible 自动化平台

如何在 Ubuntu 22.04 上安装和配置 Ansible 自动化平台 简介 Ansible 是一个开源项目&#xff0c;并在 Github 上收获了 63k 的 star 。它是一个极其简单的 IT 自动化平台&#xff0c;使您的应用程序和系统更易于部署和维护。使用 SSH&#xff0c;以接近简单英语的语言实现从…

PowerMILL 客制化宏 - 用户菜单定义

用户右键菜单 在PowerMILL元素浏览器空白的地方右键弹出的菜单叫用户右键菜单。用户右键菜单可以调用宏或命令或用户二次开发的应用或批处理等等。 用户右键菜单定义 用户右键菜单需要建立一个没有扩展名的 “user_menu” 名称的文件&#xff0c;一般存放在 “C:\dcam\pmill2…

006 单片机嵌入式中的C语言与代码风格规范——常识

00 环境准备&#xff1a; 配置MDK支持C99 内置stdint.h介绍 stdint.h 是从 C99 中引进的一个标准 C 库的文件 路径&#xff1a;D:\MDK\ARM\ARMCC\include 01 C语言基础语法 一般的bug很有可能是C语言功底不扎实导致…… 1.结构体 由若干基本数据类型集合组成的一种自定义数…

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 该文档主要介绍了国立台湾大学&#xff08;NTU&#xff09;2024 年春季 “生成式人工智能&#xff08;GenAI&#xff09;” 课程的作业 5&#xff08;GenAI HW…

ZYNQ-7020嵌入式系统学习笔记(1)——使用ARM核配置UART发送Helloworld

本工程实现调用ZYNQ-7000的内部ARM处理器&#xff0c;通过UART给电脑发送字符串。 硬件&#xff1a;正点原子领航者-7020 开发平台&#xff1a;Vivado 2018、 SDK 1 Vivado部分操作 1.1 新建工程 设置工程名&#xff0c;选择芯片型号。 1.2 添加和配置PS IP 点击IP INTEGR…

JSONCPP 数据解析与序列化

常用类接口 Json::Value 类 用于存储 JSON 数据的核心类。它支持将数据解析为对象、数组或基本类型&#xff08;如字符串、数值等&#xff09; 赋值操作符&#xff1a;Value& operator(Value other); 用于将一个 JSON 值赋给另一个 JSON 值 Json::Value value; value &…