资讯动态

2026华为OD面试题072:二进制差异数

发布时间:2026/8/19 23:12:41 来源:尧图企业网站定制
题目描述对于任意两个正整数 A 和 B,定义它们之间的差异值和相似值:差异值:A、B 转换成二进制后,每一位对应 bit 值不相同则为 1,否则为 0(即异或)相似值:A、B 转换成二进制后,每一位对应 bit 值都为 1 则为 1,否则为 0(即按位与)现有 n 个正整数 A0 到 A(n-1),问有多少对 (i, j)(0 = i j n),Ai 和 Aj 的差异值大于相似值。举例:A=5(二进制 101),B=3(二进制 011),差异值为 110(6),相似值为 001(1),6 1,算一对。输入描述:第一行为正整数 n,第二行为 n 个正整数。输出描述:满足条件的对数。讲个故事:比比谁更不像给你一堆数,两两配对,看哪一对"差异"比"相似"大。差异就是二进制里不一样的位(异或),相似就是二进制里都是 1 的位(按位与)。5 和 3:5 是 101,3 是 011,不一样的位是 110(6),都为 1 的位是 001(1),6 比 1 大,算一对。一个一个比是 O(n^2),数多了扛不住。但仔细想想,差异大不大,跟两个数的"最高位"关系密切,按最高位分个组就能秒算。核心原理:按最高有效位分组比较两个数的异或(差异)和按位与(相似),关键看最高位:两个数最高有效位(MSB)相同:在这一位上两个数都是 1,所以按位与在这一位是 1,

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价