LeetCode 421. 数组中两个数的最大异或值

原题链接:https://leetcode.cn/problems/maximum-xor-of-two-numbers-in-an-array/description/?envType=daily-question&envId=2023-11-04

题目分析

异或且时间复杂度在nlogn内第一反应想到字典树,扫一遍存进字典树,然后遍历每个数,

对比当前位数i下,整个数组内是否有某个数的i位上和当前数的i位相异的,如果相异就能取1。高位优先,所以查出来的数会是最大的。

细节上没处理好,过了题但效率偏低

LeetCode 421. 数组中两个数的最大异或值_第1张图片

C++代码(字典树)

class Solution {
public:
    int idx = 0;
    int son[32*200000+5][2];
    void insert(string str){
        int p = 0;//指向树中哪一个节点
        for(int i=0;i& nums) {
        int res = 0;
        memset(son,0,sizeof son);
        for(auto it:nums){
            bitset<32> binary(it);
            insert(binary.to_string());
        }

        for(auto it:nums){
            bitset<32>binary(it);
            string str = binary.to_string();
            string temp = "";
            int len = str.length();
            int p = 0;
            for(int i=0;i

时间复杂度:O(nlogC)  C为数值大小

空间复杂度:O(nlogC)

实际运行出来效率不高,占的空间也比较大

你可能感兴趣的:(LeetCode,leetcode,算法)