作者JIWP (神楽めあ的錢包)
看板Marginalman
標題Re: [閒聊] 每日leetcode
時間Fri Nov 8 23:04:49 2024
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