C++ | Leetcode C++题解之第421题数组中两个数的最大异或值

ops/2024/9/25 19:20:22/

题目:

题解

struct Trie {// 左子树指向表示 0 的子节点Trie* left = nullptr;// 右子树指向表示 1 的子节点Trie* right = nullptr;Trie() {}
};class Solution {
private:// 字典树的根节点Trie* root = new Trie();// 最高位的二进制位编号为 30static constexpr int HIGH_BIT = 30;public:void add(int num) {Trie* cur = root;for (int k = HIGH_BIT; k >= 0; --k) {int bit = (num >> k) & 1;if (bit == 0) {if (!cur->left) {cur->left = new Trie();}cur = cur->left;}else {if (!cur->right) {cur->right = new Trie();}cur = cur->right;}}}int check(int num) {Trie* cur = root;int x = 0;for (int k = HIGH_BIT; k >= 0; --k) {int bit = (num >> k) & 1;if (bit == 0) {// a_i 的第 k 个二进制位为 0,应当往表示 1 的子节点 right 走if (cur->right) {cur = cur->right;x = x * 2 + 1;}else {cur = cur->left;x = x * 2;}}else {// a_i 的第 k 个二进制位为 1,应当往表示 0 的子节点 left 走if (cur->left) {cur = cur->left;x = x * 2 + 1;}else {cur = cur->right;x = x * 2;}}}return x;}int findMaximumXOR(vector<int>& nums) {int n = nums.size();int x = 0;for (int i = 1; i < n; ++i) {// 将 nums[i-1] 放入字典树,此时 nums[0 .. i-1] 都在字典树中add(nums[i - 1]);// 将 nums[i] 看作 ai,找出最大的 x 更新答案x = max(x, check(nums[i]));}return x;}
};

http://www.ppmy.cn/ops/115911.html

相关文章

Android状态栏StatusBar颜色修改

<!-- 文字及图标颜色&#xff1a;true为深色&#xff0c;false为浅色 --> <item name"android:windowLightStatusBar">true</item> <!-- 背景色 --> <item name"android:statusBarColor">?android:attr/colorPrimary</i…

会声会影2025视频剪辑教学

会声会影2025是一款超级受欢迎的视频播放软件&#xff0c;用于剪辑和编辑各种类型的视频素材。软件具有直观的用户界面&#xff0c;使得即使对于初学者来说也能轻松上手。该软件提供了各种创意工具&#xff0c;可以帮助用户实现他们的创意想法。用户可以裁剪、合并和重新排列视…

Python Web开发中的持续集成与持续交付(CI/CD)

Python Web开发中的持续集成与持续交付&#xff08;CI/CD&#xff09; 目录 &#x1f6e0; CI/CD 基础 1.1 持续集成&#xff08;CI&#xff09;与持续交付&#xff08;CD&#xff09;的基本概念1.2 CI/CD 对敏捷开发的作用 &#x1f4dd; Pipeline 配置 2.1 使用 GitHub Act…

编程练习2 数据单元的变量替换

示例1: 1,2<A>00 示例2: 1,2<A>00,3<A>00 示例3: <B>12,1,2<B>1 示例4: <B<12,1 输出依次如下&#xff1a; #include<iostream> #include<vector> #include<string>using namespace std;/* 字符分割函数 将传入…

Java中List、ArrayList与顺序表

List、ArrayList与顺序表 List什么是List常用方法介绍List的使用 ArrayList与顺序表线性表顺序表接口的实现 ArrayList简介ArrayList的使用ArrayList的构造ArrayList的常见操作ArrayList的遍历ArrayList的扩容机制 ArrayList的具体使用杨辉三角简单的洗牌算法 ArrayList的问题及…

加速AI数据应用,肯睿Cloudera推出六款全新机器学习项目加速器AMPs

肯睿Cloudera大中华区技术总监刘隶放表示&#xff1a;“随着中国企业对人工智能的需求日益增长&#xff0c;如何快速、安全地将AI技术落地成为企业的核心诉求。Cloudera全新推出的AMPs不仅为企业提供了可一键部署的AI解决方案&#xff0c;更通过开源的方式缩短企业部署时间&…

成语700词(31~45组)

目录 31.对待错误的态度(12 个)32.改变与不变(19 个)33.顺势造势(6 个)34.自然会发生(6 个)35.提早准备和补救(11 个)36.办公、管理相关(8 个)37.空谈与虚幻(8 个)38.来者众多(11 个)39.人多热闹(6)40.好坏掺杂(7 个)41.流行与名声(14 个)42.与传播、传闻…

Python网络爬虫获取Wallhaven壁纸图片(源码)

** 话不多说&#xff0c;直接附源码&#xff0c;可运行&#xff01; ** import requests from lxml import etree from fake_useragent import UserAgent import timeclass wallhaven(object):def __init__(self):# yellow# self.url "https://wallhaven.cc/search?co…