力扣-位运算-1【算法学习day.41】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

tip:下面题目套路类似,就不分析了

1.使两个整数相等的位更改次数

题目链接:3226. 使两个整数相等的位更改次数 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int minChanges(int n, int k) {
        if(n==k)return 0;
        if(n<k)return -1;
        int ans = 0;
        while(n>0){
            if((n&1)==1&&(k&1)==0){
                ans++;
            }
            else if((n&1)==0&&(k&1)==1){
                return -1; 
            }
             n>>=1;
             k>>=1;
            //  if(max>0&&min==0)return -1;
        }
        return ans;
    }
}

2.根据数字二进制下1的数目排序

题目链接:1356. 根据数字二进制下 1 的数目排序 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int[] sortByBits(int[] arr) {
      int n = arr.length;
      for(int i = 0;i<n-1;i++){
        for(int j = i+1;j<n;j++){
            if(getOneNumber(arr[i])>getOneNumber(arr[j])){
               swap(arr,i,j);
            }
            else if(getOneNumber(arr[i])==getOneNumber(arr[j])&&arr[i]>arr[j]){
                swap(arr,i,j);
            }
        }
      }  
      return arr;
    }
    public int getOneNumber(int n){
        int ans = 0;
        while(n>0){
            if((n&1)==1){
                ans++;
            }
            n>>=1;
        }
        return ans;
    }

    public void swap(int[] arr,int i,int j){
        int flag = arr[i];
        arr[i] = arr[j];
        arr[j] = flag;
    }
}

3.汉明距离

题目链接:461. 汉明距离 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int hammingDistance(int x, int y) {
        int ans = 0;
        while(x>0||y>0){
            if((x&1)!=(y&1)){
                ans++;
            }
            x>>=1;
            y>>=1;
        }
        return ans;
    }
}

4.转换数字的最少位翻转次数

题目链接:2220. 转换数字的最少位翻转次数 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int minBitFlips(int start, int goal) {
     int ans = 0;
     for(int i = start^goal;i>0;i-=lowbit(i))ans++;
      return ans;
    }
    public int lowbit(int n){
        return n&(-n);
    }
}

5.数字的补数

题目链接:476. 数字的补数 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int findComplement(int num) {
        int flag = 0;
        int flag2 = num;
        while(num>0){
            flag<<=1;
            flag+=1;
            num>>=1;
        }
        return flag^flag2;
    }
}

6.十进制整数的反码

题目链接:1009. 十进制整数的反码 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int bitwiseComplement(int n) {
        if(n==0)return 1;
         int flag = n;
         int flag2 = 0;
         while(n>0){
            flag2<<=1;
            flag2+=1;
            n>>=1;
         }
         return flag^flag2;
    }
}

7.二进制间距

题目链接:868. 二进制间距 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int binaryGap(int n) {
       int max = 0;
       int[] arr = new int[40];
       int count = 0;
       for(int i = n;i>0;i-=lowbit(i)){
            int flag = lowbit(i);
            arr[count++] = (int)(Math.log(flag)/Math.log(2))+1;
       }
       for(int i = 1;i<count;i++){
            max = Math.max(max,arr[i]-arr[i-1]);
       }
       return max;
    }

    public int lowbit(int n){
        return n&(-n);
    }
}

8.生成不含相邻零的二进制字符串

题目链接:3211. 生成不含相邻零的二进制字符串 - 力扣(LeetCode)

题面:

代码: 

class Solution {
    List<String> ans = new ArrayList<>();
    int n;
    public List<String> validStrings(int n) {
        this.n = n;
        recursion(1,"",0);
        return ans;
    }
    public void recursion(int t,String str,int flag){
        if(t==n+1){
            ans.add(str);
            return;
        }
        if(t==1||flag==1){
            recursion(t+1,str+"0",0);
            recursion(t+1,str+"1",1);
        }
        else if(flag==0){
            recursion(t+1,str+"1",1);
        }
    }
}

9.找出数组中的K-or值

题目链接:2917. 找出数组中的 K-or 值 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int findKOr(int[] nums, int k) {
        int n = nums.length;
        int ans = 0;
        for (int i = 0; i < 31; i++) {
                int sum = 0;
            for (int j = 0; j < n; j++) {
                sum+=(nums[j] & 1);
                nums[j] >>= 1;
            }  
                if(sum>=k){
                   ans |= 1 << i;    
                }
        }
        return ans;
    }
}

10.交替位二进制数

题目链接:693. 交替位二进制数 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public boolean hasAlternatingBits(int n) {
        int len = (int)(Math.log(n)/Math.log(2))+1;
        int flag = n&1;
        n>>=1;
        for(int i = 1;i<len;i++){
           int lin = n&1;
           if(lin==flag)return false;
           flag = lin;
           n>>=1;
        }
        return true;
    }
}

11.找到两个数组的前缀公共数组

题目链接:2657. 找到两个数组的前缀公共数组 - 力扣(LeetCode)

题面:

代码:

class Solution {
    public int[] findThePrefixCommonArray(int[] A, int[] B) {
        int n  = A.length;
        int[] ans = new int[n];
        long flaga = 0;
        long flagb = 0;
        for(int i = 0;i<n;i++){
            int a = A[i];
            int b = B[i];
            flaga|=(1L<<(a-1));
            flagb|=(1L<<(b-1));
            long lin = (flaga&flagb);
            ans[i] = Long.bitCount(lin);
        }
        return ans;
    }
    // public long lowbit(long n){
    //     return n&(-n);
    // }
}

后言

上面是力扣位运算专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库学习(持续更新ing)

1. 什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间的关系是什么&#xff1f; 数据库&#xff1a;Database&#xff0c; 简称DB。按照一定格式存储数据&#xff0c;一些文件的组合。 数据库管理系统&#xff1a;DataBaseManagement&…

【Python · PyTorch】循环神经网络 RNN(基础概念)

【Python PyTorch】循环神经网络 RNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念2. 延时神经网络&#xff08;TDNN&#xff09;3. 简单循环神经网络&#xff08;Simple RNN&#xff09;3.1 BiRNN 双向循环神经网络3.2 特点记忆性参数共享图灵完备 3.3 网络结构3…

【Isaac Sim】相关问题汇总

目录 一、安装点击Install时报错二、启动时报 Failed to create any GPU devices三、加载Isaac Sim自带模型或示例时报 Isaac Sim is not responding 一、安装点击Install时报错 报错&#xff1a; request to https://asset.launcher.omniverse.nvidia.com/… failed, reason:…

接口上传视频和oss直传视频到阿里云组件

接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…

DataWorks快速入门

DataWorks基于MaxCompute、Hologres、EMR、AnalyticDB、CDP等大数据引擎&#xff0c;为数据仓库、数据湖、湖仓一体等解决方案提供统一的全链路大数据开发治理平台。本文以DataWorks的部分核心功能为例&#xff0c;指导您使用DataWorks接入数据并进行业务处理、周期调度以及数据…

项目学习:仿b站的视频网站项目03-注册功能

概括 通过上一期&#xff0c;完成了项目和数据库的基础结构的搭建&#xff0c;接下来主要是完成项目的注册功能。该功能模块主要分为有两个接口&#xff0c;一个是验证码接口&#xff0c;一个是注册接口。 让我们开始吧&#xff01; 验证码接口 验证码的生成主要配合下面这…

20.100ASK_T113-PRO 开发板开机自动QT程序简单的方法一

本文详细介绍了在嵌入式系统中实现程序开机自启动的多种方法&#xff0c;包括通过修改/etc/profile、/etc/rc.local文件&#xff0c;以及在/etc/init.d目录下创建启动脚本等方式。文章还解释了不同配置文件的作用及它们之间的区别。 开机自动启动QT应用程序 用户模式下的启动 …

【Java】Linux、Mac、Windows 安装 Oracle JDK

一、Linux 环境安装JDK 1、下载 根据实际需求&#xff0c;在 Oracle 官网 上下载某版本JDK&#xff08;如 jdk-8u341-linux-x64.tar.gz&#xff09;&#xff0c;再通过文件传输工具&#xff08;如 Finalshell、FileZilla 等&#xff09;丢到服务器上。 2、安装 # 查看是否安…

Web3与智能合约:区块链技术下的数字信任体系

随着互联网的不断发展&#xff0c;Web3代表着我们迈入了一个去中心化、更加安全和智能的网络时代。作为Web3的核心组成部分&#xff0c;区块链技术为智能合约的出现和发展提供了强有力的基础。智能合约不仅仅是自动化的代码&#xff0c;它们正逐步成为重塑数字世界信任体系的关…

怎么把湖南平江1000吨黄金开采出来?开采露天金矿的实用公式与方案——露天矿山爆破设计施工方案

在露天矿山爆破设计中&#xff0c;面对多溶洞、多破碎带和多断层的复杂地质条件&#xff0c;需要制定一套科学、合理的爆破方案。以下是一份详细的爆破设计施工方案&#xff0c;包括爆破参数与计算公式&#xff1a; 一、爆破设计原则 1.安全性&#xff1a;确保爆破作业过程中的…

电子应用设计方案-20:智能电冰箱系统方案设计

智能电冰箱系统方案设计 一、系统概述 本智能电冰箱系统旨在提供更便捷、高效、智能化的食品存储和管理解决方案&#xff0c;通过集成多种传感器、智能控制技术和联网功能&#xff0c;实现对冰箱内部环境的精确监测和控制&#xff0c;以及与用户的互动和远程管理。 二、系统组成…

栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历

目录 力扣394.字符串解码 力扣946.验证栈序列 力扣429.N叉树的层序遍历 力扣103.二叉树的锯齿形层序遍历 力扣394.字符串解码 看见括号&#xff0c;由内而外&#xff0c;转向用栈解决。使用两个栈处理&#xff0c;一个用String,一个用Integer 遇到数字:提取数字放入到数字栈…

pandas与open读取csv/txt文件速度比较

pandas与open读取csv/txt文件速度比较 由于在工作中经常需要读取txt或csv文件&#xff0c;使用pandas与open均可以读取并操作文件内容&#xff0c;但不知道那个速度更快一些&#xff0c;所以写了一个脚本去比较在文件大小不同的情况下读取数据的速度 测试结果: 大小pandas速度…

039_SettingsGroup_in_Matlab图形界面的设置选项

只要你知道你自己正在做什么&#xff0c;那么你怎么做都行。—— C.J. DateMatlab的界面与设置 Matlab的界面 Matlab的界面是GUI设计中非常值得讨论的一个议题。先来看&#xff0c;默认的Matlab界面。 这里的界面从上到下分为了四个部分&#xff0c;分别是&#xff1a; 工具…

Flink-Source的使用

Data Sources 是什么呢&#xff1f;就字面意思其实就可以知道&#xff1a;数据来源。 Flink 做为一款流式计算框架&#xff0c;它可用来做批处理&#xff0c;也可以用来做流处理&#xff0c;这个 Data Sources 就是数据的来源地。 flink在批/流处理中常见的source主要有两大类…

.net的winfrom程序 窗体透明打开窗体时出现在屏幕右上角

窗体透明&#xff0c; 将Form的属性Opacity&#xff0c;由默认的100% 调整到 80%(尽量别低于50%)&#xff0c;这个数字越小越透明&#xff01; 打开窗体时出现在屏幕右上角 //构造函数 public frmCalendarList() {InitializeComponent();//打开窗体&#xff0c;窗体出现在屏幕…

分布式系统稳定性建设-性能优化篇

分布式系统稳定性建设-性能优化篇 系统稳定性建设是系统工程的核心内容之一。以下是一些重要的方面: 架构设计: 采用模块化、松耦合的架构设计,以提高系统的可扩展性和可维护性。合理划分系统功能模块,降低单个模块的复杂度。定义清晰的接口和数据交换标准,确保各模块之间协调…

【bug】使用transformers训练二分类任务时,训练损失异常大

使用transformers训练二分类任务时&#xff0c;训练损失异常大 问题分析 问题 training_loss异常大&#xff0c;在二分类损失中&#xff0c;收敛在1~2附近&#xff0c;而eval_loss却正常&#xff08;小于0.5&#xff09; 分析 参考&#xff1a; Bug in gradient accumulation…

电容测试流程

一、外观检测 1. 目的&#xff1a;检验电容样品外观是否与规格书一致&#xff0c;制程工艺是否良好&#xff0c;确保部品的品质。 2. 仪器&#xff1a;放大镜 3. 测试说明&#xff1a; &#xff08;1&#xff09;样品上丝印与规格书中相符&#xff0c;丝印信息&#xff08;…

C++设计模式行为模式———中介者模式

文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式&#xff0c; 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互&#xff0c; 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…