0
点赞
收藏
分享

微信扫一扫

【算法基础课模板笔记+注释】 数据结构10 --- 最大异或对

龙毓七七 2022-02-19 阅读 104

声明

本文资料参考acwing算法基础课
地址:https://www.acwing.com

概述

  1. 解决问题:求一些数字最大异或对
  2. 平均时间复杂度为O(n),暴力为O(n^2)

模板记忆

这个模板和trie一样,不用单独记忆

模板代码

int son[N][2] = {}, idx;  // 用trie树存储二进制数字
int insert(int x)
{
    int p = 0, q = 0, res = 0; // p用于插入,q用于查找最大异或对,res记录最大异或对
    for (int i = 30; i >= 0; i --)  // 从高位遍历到低位,一共有31位,则最高位需要右移30位
    {
        int u = x >> i & 1;  // u得到对应位
        if (!son[p][u]) son[p][u] = ++ idx;  // 查找,没有对应分支则添加
        p = son[p][u];  // 修改平台
        if (son[q][!u]) q = son[q][!u], res += 1 << i;  // 如果存在异或支路则加上此数
        else q = son[q][u];  // 否则走非异或支路
    }
    return res;  // 返回记录值
}
举报

相关推荐

0 条评论