n个数字中任选4个数,要求a*b=c*d,求有几种选法?
先考虑没有重复的数的情况,那么只要O(n^2)枚举所有数对的积即可。
有重复的数的情况又分成两类:
1. 如果a/b/c/d均不相同,那么在上面算法的基础上再统计一下每个相同的数字出现了多少次,乘一乘即可。
【n个数字中任选4个数,要求a*b=c*d,求有几种选法?】 2. 如果a/b/c/d里有相同的数,那么只有三种情况:要么是a*a=b*c,要么是a*b=a*b,要么是a*a=a*a,显然都能在O(n^2)内搞定。
■网友
果然蒟蒻只靠脑子想不去实现的算法八成有问题…先考虑4个数互不一样的情况吧…把n个数去重排序 处理所有二元组的积及其出现的次数 对所有大于等于2的次数排列组合一下实现时可以先把所有二元组的积离散化 再统计出现次数 O(n^2logn)的时间 O(n^2)的空间可以实现然后a*b=a*b这种情况找出所有出现次数大于1的数 对所有这些数的二元组排列组合一下最后4个数相同的情况 对出现次数大于3的数排列组合一下总时间是O(n^2logn)的…
■网友
好吧,仔细想想就是最高赞的想法,好像删不了,就这样吧
推荐阅读
- 宝马7系|可以说,这款数字化高尔夫,让人看到了未来大众所有车型的样子
- 欧盟将对数字平台征税 或将再次点燃美欧间贸易紧张局势
- SSL数字证书哪家的最好?
- 大众高尔夫|没错,大众全新数字高尔夫来了,MQB Evo平台,入门级不足13万
- |徐州建有农家书屋2205家,实现数字书屋全覆盖
- 我想自己写一个视频编辑软件,都需要啥目前高三报志愿,是数字媒体,还是计算机
- 汽车|展望汽车科技出行数字化浪潮新十年
- 求大神帮我破解这段数字密码794497,2937959529,9999728,4392
- 汽车|广汽三菱:奕歌燃情版降低四驱门槛,数字化服务聚合年轻用户
- 视结构|