博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P20:难度增加的抽签问题
阅读量:7055 次
发布时间:2019-06-28

本文共 1123 字,大约阅读时间需要 3 分钟。

 

 

/*    P20页:难度增加的抽签问题   核心:处理大数据时,二分查找算法lgn的时间复杂度是很省时间的    问题:n个签,有放回抽取4次,求和是否有可能为m,n<1000    解决:1。四次循环得到4只签求和后和m比较,时间复杂度为n^4,12个0,不行         2。三次循环后得到三支签k1,k2,k3,然后二分查找最后一只签m-k1-k2-k3,找到则返回ture,否则返回false,时间为n^3lgn,10个0,不行         3。二次循环后得到二只签k1, k2,枚举2只签的和的n^2种情况并排序,然后再其中二分查找n-k1-k2。排序的时间复杂度为n^2lgn^2=2n^2lgn=o(n^2lgn),二次循环加二分查找的时间复杂度为o(n^2lgn^2),总的时间复杂度为n^2lgn, 7个0,可以轻松运行处结果*/#include 
#include
#include
#include
using namespace std;const int Max = 1010;int n, m;int k[Max];int main(void){ int k_enum[2*Max]; int it0 = 0; cin >> n >> m; for (int i = 0; i < n; i++) cin >> k[i]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { k_enum[it0] = k[i] + k[j]; it0++; } sort(k_enum, k_enum + n * n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if( binary_search(k_enum, k_enum+n*n, m-k[i]-k[j]) ) { cout << "Yes"; return 0; } } cout << "No"; return 0;}

 

转载于:https://www.cnblogs.com/jkn1234/p/8699081.html

你可能感兴趣的文章
十四条令PHP初学者头疼问题大总结(1)
查看>>
MySQL的备份与还原
查看>>
加密U盘专业加密芯片方案
查看>>
js比较字符数组元素是否重复
查看>>
码客Online:HTC Zoe是什么功能?
查看>>
windows server 2012 r2 搭建企业文件共享存储
查看>>
我的友情链接
查看>>
[20180606]如何dump数据库里面的汉字.txt
查看>>
C#面向对象(四)虚方法实现多态
查看>>
day3-Nfs
查看>>
函数栈帧(用汇编来剖析)
查看>>
C++中const用法总结(转)
查看>>
给Windows 2003文件夹设置权限
查看>>
Android x86+ADT
查看>>
算法53----换钱的最小次数和方法数【动态规划】
查看>>
Python爬虫1-----urllib模块
查看>>
深入理解Java虚拟机(七)字节码执行引擎(栈帧、动态连接、方法调用)
查看>>
<input>标签中获得鼠标与否的样式变化——js实现
查看>>
Percona XtraDB Cluster 的一些使用限制(PXC 5.7)
查看>>
mysql 源代码目录及安装目录介绍
查看>>