力扣-位运算-3【算法学习day.43】

前言

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


习题

1.每个查询的最大异或值

题目链接: 1829. 每个查询的最大异或值 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    public int[] getMaximumXor(int[] nums, int maximumBit) {
        int n = nums.length;
        // maximumBit = (int)Math.pow(2,maximumBit);
        int flag = nums[0];
        for(int i = 1;i<n;i++){
            flag^=nums[i];
        }
        int[] ans = new int[n];
        int count = n;
        int maxindex;
        int max;
        int u = (1<<(maximumBit))-1;
        for(int i = 0;i<n;i++){
            ans[i] = (flag)^u;
            flag^=nums[count-1];
            count--;
        }
        return ans;
    }
}

2.使数组异或和等于K的最少操作次数

题目链接: 2997. 使数组异或和等于 K 的最少操作次数 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    public int minOperations(int[] nums, int k) {
        int n = nums.length;
        for(int i = 0;i<n;i++){
            k^=nums[i];
        }
        int ans = 0;
        return Integer.bitCount(k);
    }
}

3.形成两个异或相等数组的三元组数目

题目链接: 1442. 形成两个异或相等数组的三元组数目 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    public int countTriplets(int[] arr) {
        int n = arr.length;
        for(int i = 1;i<n;i++){
            arr[i]^=arr[i-1];
        }
        int ans = 0;
        int a;
        int b;
        for(int i = 0;i<n-1;i++){
            for(int j=i+1;j<n;j++){
                for(int k = j;k<n;k++){
                    if(i==0){
                        a = arr[j-1];
                    }else{
                        a = arr[j-1]^arr[i-1];
                    }
                    b = arr[k]^arr[j-1];
                    if(a==b)ans++;
                }
            }
        }
       return ans;
    }
}

4.最小异或

题目链接: 2429. 最小异或 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    public int minimizeXor(int num1, int num2) {
        int oneBitNum2 = Integer.bitCount(num2);
        int lenNum1 = (int)(Math.log(num1)/Math.log(2))+1;
        int flag = (1<<lenNum1)-1;
        int ans = flag&num1;
        int oneBitAns = Integer.bitCount(ans);
        if(oneBitAns==oneBitNum2)return ans;
        else if(oneBitAns>oneBitNum2){
            for(int i = 0;i<(oneBitAns-oneBitNum2);i++){
                ans-=(ans&(-ans));
            }
        }
        else{
            int bit = 1;
            for(int i = 0;i<(oneBitNum2-oneBitAns);i++){
                while(Integer.bitCount(ans)>=Integer.bitCount(ans+bit)){
                    bit*=2;
                }
                ans+=bit;
            }
        }
        return ans;
    }
}

后言

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

相关推荐
hanlin034 分钟前
刷题笔记:力扣第19题-删除链表的倒数第N个结点
笔记·leetcode·链表
MartinYeung55 分钟前
[论文学习]The Instruction Hierarchy:训练LLM优先处理特权指令
人工智能·深度学习·学习
m0_6174939418 分钟前
Python OpenCV 分水岭算法(Watershed)详解与实战
python·opencv·算法
海带紫菜菠萝汤18 分钟前
企业批量PDF翻译方案:从选型到部署的完整指南
人工智能·算法·pdf
贵慜_Derek34 分钟前
vLLM-05|MLA、Compressor、Indexer 与 SWA:Flash 注意力栈在 vLLM 里怎么落地
人工智能·算法·llm
菜鸟的升级路34 分钟前
C语言栈刷题:LeetCode 20 有效的括号完整解题笔记
c语言·笔记·leetcode
冻柠檬飞冰走茶36 分钟前
PTA基础编程题目集 7-13 日K蜡烛图(C语言实现)
c语言·开发语言·数据结构·算法
Databend44 分钟前
从全表排序到概率统计:Databend 如何用 KLL、Top-N 与 CMS 改进基数估计
大数据·数据库·算法
晓梦林1 小时前
[Dest0g3 520迎新赛]EasyPHP-学习笔记
android·笔记·学习
imuliuliang1 小时前
分治法在大数据计算中的并行化应用探索7
算法