
1829. Maximum XOR for Each Query
給一個排序後的非負數矩陣nums,長度為n
再給一個maxnumBit
必須要執行n次下面的操作
1.找到一個非負整數k < 2^maxnumBit
  使nums[0] xor nums[1] xor ...xor nums[nums.length-1] xor k是最大值
  此時k就是answer[nums.length-1]的值
2.接著把nums最後的值去掉
最後回傳answer
思路:
經過題目第1.操作後能得到的最大值就是 2^maxnumBit - 1
就先弄一個maxnum = 2^maxnumBit - 1
接著假設xor_result=nums[0] ^ nums[1] ^ ... ^ nums[nums.length-1]
再來就照著題目去做
因為ans[0] ^ xor_result = maxnum
所以ans[0] = xor_result ^ maxnum
就這樣以此類推
記得每次操作後xor_result要xor nums[nums.length-1-i]
這樣就可以得到答案了
C code :
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getMaximumXor(int* nums, int numsSize, int maximumBit, int* returnSize) {
    int *ans=(int*)calloc(numsSize,sizeof(int)),xor_res=0,max_num=0;
    *returnSize=numsSize;
    for (int i=0;i<maximumBit;i++)
    {
        max_num=(max_num<<1) +1 ;
    }
    for (int i=0;i<numsSize;i++)
    {
        xor_res^=nums[i];
    }
    for (int i=0;i<numsSize;i++)
    {
        ans[i]=xor_res^max_num;
        xor_res ^= nums[numsSize-1-i];
    }
    return ans;
}
--
https://i.imgur.com/r9FBAGO.gif
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.214.243 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1731078291.A.0CA.html
    
    
    
    
