diff --git a/src/main/java/leetcode/editor/cn/MaximumXorOfTwoNumbersInAnArray.java b/src/main/java/leetcode/editor/cn/MaximumXorOfTwoNumbersInAnArray.java new file mode 100644 index 0000000..4e2e744 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/MaximumXorOfTwoNumbersInAnArray.java @@ -0,0 +1,97 @@ +//给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。 +// +// 进阶:你可以在 O(n) 的时间解决这个问题吗? +// +// +// +// +// +// 示例 1: +// +// +//输入:nums = [3,10,5,25,2,8] +//输出:28 +//解释:最大运算结果是 5 XOR 25 = 28. +// +// 示例 2: +// +// +//输入:nums = [0] +//输出:0 +// +// +// 示例 3: +// +// +//输入:nums = [2,4] +//输出:6 +// +// +// 示例 4: +// +// +//输入:nums = [8,10,2] +//输出:10 +// +// +// 示例 5: +// +// +//输入:nums = [14,70,53,83,49,91,36,80,92,51,66,70] +//输出:127 +// +// +// +// +// 提示: +// +// +// 1 <= nums.length <= 2 * 104 +// 0 <= nums[i] <= 231 - 1 +// +// +// +// Related Topics 位运算 字典树 +// 👍 324 👎 0 + +package leetcode.editor.cn; + +import java.util.HashSet; +import java.util.Set; + +//421:数组中两个数的最大异或值 +public class MaximumXorOfTwoNumbersInAnArray { + public static void main(String[] args) { + //测试代码 + Solution solution = new MaximumXorOfTwoNumbersInAnArray().new Solution(); + System.out.println(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public int findMaximumXOR(int[] nums) { + int x = 0; + for (int k = 30; k >= 0; k--) { + Set set = new HashSet<>(); + boolean found = false; + + for (int num : nums) { + set.add(num >> k); + if (set.contains(((x << 1) + 1) ^ (num >> k))) { + found = true; + break; + } + } + + x <<= 1; + if (found) { + x++; + } + } + return x; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/MaximumXorOfTwoNumbersInAnArray.md b/src/main/java/leetcode/editor/cn/MaximumXorOfTwoNumbersInAnArray.md new file mode 100644 index 0000000..4f50a77 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/MaximumXorOfTwoNumbersInAnArray.md @@ -0,0 +1,54 @@ +

给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n

+ +

进阶:你可以在 O(n) 的时间解决这个问题吗?

+ +

 

+ +
+
+

示例 1:

+ +
+输入:nums = [3,10,5,25,2,8]
+输出:28
+解释:最大运算结果是 5 XOR 25 = 28.
+ +

示例 2:

+ +
+输入:nums = [0]
+输出:0
+
+ +

示例 3:

+ +
+输入:nums = [2,4]
+输出:6
+
+ +

示例 4:

+ +
+输入:nums = [8,10,2]
+输出:10
+
+ +

示例 5:

+ +
+输入:nums = [14,70,53,83,49,91,36,80,92,51,66,70]
+输出:127
+
+ +

 

+ +

提示:

+ +
    +
  • 1 <= nums.length <= 2 * 104
  • +
  • 0 <= nums[i] <= 231 - 1
  • +
+
+
+
Related Topics
  • 位运算
  • 字典树
  • \n
  • 👍 316
  • 👎 0
  • \ No newline at end of file