日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array

發(fā)布時間:2025/3/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/

利用了異或的”自反性“: a ^ b = c,而a ^ b ^ b = a, 則 c ^ b = a

其他運算定律有:交換律、結(jié)合律、分配律。

注意:計算使用的結(jié)果,不是只看一位,而是每次把新的一位加到原來的結(jié)果后面。這樣的好處是不需要記錄之前的結(jié)果滿足條件的有哪些,每次就重新計算和查找就可以了,大大降低了復雜度。

// 非常非常棒 // 參考了 https://discuss.leetcode.com/topic/63213/java-o-n-solution-using-bit-manipulation-and-hashmap // 特別的,利用了異或的強大運算特性,見22行,來加速運算public class Solution {public int findMaximumXOR(int[] nums) {int max = 0;int flag = 0;// from left to rightfor (int i=31; i>=0; i--) {Set<Integer> prefixSet = new HashSet();// flag : 11110000flag = flag | (1<<i);for (int num : nums) {prefixSet.add(num & flag);}// tmp, max: 10101000000, add more 1 int tmp = max | (1<<i);for (int prefix : prefixSet) {// 利用了 ^ 的 a ^ b = c,則 b ^ c = aif (prefixSet.contains(tmp ^ prefix)) {max = tmp;break;}}}return max;} }

?

總結(jié)

以上是生活随笔為你收集整理的【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。