•
1 min read

找出数对数目

Archive · written in 2014
Table of Contents

刚看到的一道算法题。

题目

给定两个正数数组X和Y,找出满足下面条件的数对的数目: xy>yxx^y>y^x

分析

设数组长度分别为m,n。暴力解法时间复杂度为O(m∗n)O(m*n)。但是这样一来正数的条件完全没有用到。尝试变换一下形式,得到ylog⁡x>xlog⁡yy\log x>x\log y。更进一步,有log⁡xx>log⁡yy\frac{\log x}{x}>\frac{\log y}{y}。

所以,对数组X与Y分别计算log⁡xx\frac{\log x}{x},log⁡yy\frac{\log y}{y}。然后对Y进行排序,复杂度为O(nlog⁡n)O(n\log n)。最后遍历X,对每一个X,在Y中进行二分查找。总的时间复杂度为O(nlog⁡n+mlog⁡n)O(n\log n + m\log n)。