• b_lc_每个查询的最大异或值(贪心+位运算)


    A由 n 个非负整数组成,同时给你一个整数 maximumBit 。你需要执行以下查询 n 次(n<1e5):

    • 找到一个非负整数 k < 2maximumBit ,使得 A[0] XOR A[1] XOR ... XOR A[A.length-1] XOR k 的结果 最大化 。k 是第 i 个查询的答案。
    • 从当前数组 A删除 最后 一个元素。

    请你返回一个数组 answer,其中 answer[i] 是第 i 个查询的结果。

    贪心:算出每个前缀pre的二进制位,然后找到pre的二进制位中0的位置,算出bit 0的贡献到 k 中即可

    class Solution {
    public:
        vector<int> getMaximumXor(vector<int>& A, int maximumBit) {
            int n = A.size();
            vector<int> ans(n);
            vector<int> pre(n+1, 0);
            int limit = 1 << maximumBit;
            for (int i=1; i<=n; i++)
                pre[i] = pre[i-1] ^ A[i-1];
    
            for (int i=n; i>0; i--) {
                bitset<32> bit(pre[i]);
                int k = 0;
                for (int j = 30; j >= 0; j--) {
                    if (bit[j] == 0 && k + (1 << j) < limit) {
                        k += 1 << j;
                    }
                }
                ans[n-i] = k;
            }
            return ans;
        }
    };
    
  • 相关阅读:
    Oracle,第六周
    JAVA创建对象的几种方式
    深拷贝和浅拷贝
    Facade
    Adapter
    低谷过去了
    Oracle,第五周
    Command
    Singleton
    mybatis自动生成mapping和实体
  • 原文地址:https://www.cnblogs.com/wdt1/p/14672531.html
Copyright © 2020-2023  润新知