首页 > 其他分享 >leetcode2935 找出强数对的最大异或值II

leetcode2935 找出强数对的最大异或值II

时间:2024-12-29 16:11:11浏览次数:1  
标签:leetcode2935 nums trie tr II int 异或

给定数组nums[n],如果一对整数x和y满足|x-y|<=min(x,y),则称其为强数对。需要从nums[n]中选出一个强数对,并且异或结果最大。
1<=n<=5E4; 1<=nums[i]<2^20

分析:trie+双指针。不妨设x<=y,对|x-y|<=min(x,y)变形得:x<=y<=2x,也就是说只能在[x,2x]范围内选择,可以用双指针来维护有效范围。

// 01-trie模板。。。

class Solution {
public:
    int maximumStrongPairXor(vector<int>& nums) {
        int n = nums.size();
        std::sort(nums.begin(), nums.end());

        Trie tr;
        tr.init(1 << 20);
        int ans = 0;
        for (int L = 0, R = 0; L < n; L++) {
            while (R < n && nums[R] <= 2 * nums[L]) {
                tr.insert(nums[R]);
                R += 1;
            }
            ans = std::max(ans, nums[L] ^ tr.find(nums[L]));
            tr.remove(nums[L]);
        }
        return ans;
    }
};

标签:leetcode2935,nums,trie,tr,II,int,异或
From: https://www.cnblogs.com/chenfy27/p/18639078

相关文章

  • leetcode1707 与数组中元素的最大异或值
    给定数组nums[n]和查询数组queries[m],其中queries[i]=[xi,mi],第i个查询表示nums[n]中不超过mi的所有元素与xi异或的最大值。1<=n,m<=1E5;0<=nums[i],xi,mi<=1E9分析:01trie+离线。将询问按mi从小到大排序,将nums[n]从小到大排序,每次处理询问前,把不超过mi的数都加入trie,回答询问。......
  • LeetCode 82:删除排序链表中的重复元素 II
    题目:方法一:方法二:代码示例packagecom.zy.leetcode.LeetCode_82;/***@Author:zy*@Date:2024-12-26-10:51*@Description:*.删除排序链表中的重复元素II*/publicclassListNode_82{privateintval;privateListNode_82next;......
  • 洛谷 P8773 [蓝桥杯 2022 省 A] 选数异或 做题记录
    前置芝士:无?思路搜线段树的tag找到了一道非线段树题(因为\(\oplus\)是可逆的,即我们既可以\(a\oplusb=c\)同时也有\(a\oplusc=b\)。那么这启示我们,一个数\(a\)可以匹配的数一定为\(a\oplusx\)。我们用\(lst\)记录每一个元素最后出现的位置,设\(f_i\)为右......
  • window环境下 IIS负载均衡
    目录负载均衡分类DNS轮询CDNIP负载均衡网络七层协议ARR(ApplicationRequestRoute)配置IIS集群负载均衡配置负载监控Nginx获取真实客户端IP地址ARR 负载均衡任何的负载均衡技术都要想办法建立某种一对多的映射机制:一个请求的入口映射到多个......
  • 140. 单词拆分 II
    题目链接解题思路:和139题类似,只不过要把所有的结果存起来而已代码classSolution:defcheck(self,s:str,i:int,s2:str)->int:ifi+len(s2)>len(s):return-1forchins2:ifch!=s[i]:......
  • 122. 买卖股票的最佳时机 II
    题目链接解题思路:来到i天,如果i的价格大于i-1的价格,那么就可以赚到差价。所以,遍历的过程中,只要prices[i]>prices[i-1],那么就可以获利了代码classSolution:defmaxProfit(self,prices:List[int])->int:ans=0foriinrange(1,len(price......
  • 506 最长上升子序列II
    //506最长上升子序列II.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/647给定一个长度为n的数组a1,a2,…,an,问其中的最长上升子序列的长度。也就是说,我们要找到最大的m以及数组p1,p2,…,pm,满足1≤p1......
  • # [THUSC2015] 异或运算
    P5795[THUSC2015]异或运算题目描述给定长度为\(n\)的数列\(X={x_1,x_2,...,x_n}\)和长度为\(m\)的数列\(Y={y_1,y_2,...,y_m}\),令矩阵\(A\)中第\(i\)行第\(j\)列的值\(A_{i,j}=x_i\\operatorname{xor}\y_j\),每次询问给定矩形区域\(i∈[u,d],j∈[l,r]\),找出第......
  • 路径总和 III(递归)
    给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 示例1:输入:root=[10,5,-3,3,2,null,11,3,-2,null,1]......
  • [THUSC2015] 异或运算 题解
    学到新思路了:求解\(k\)大值时,可以将所有元素放一块一起跑。考虑到\(n,q\)奇小无匹,我们便可以制造一个\(O(qn\logV)\)的代码。那么对于我们不想在时间复杂度中出现的\(m\),我们直接把他扔进可持久化\(Trie\)中销赃。再根据刚才那个思路,将\([u,d]\)中所有点扔进可持......