看板 Marginalman
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